Zum Inhalt springen

Patrick.Karre

Mitglieder
  • Gesamte Inhalte

    668
  • Benutzer seit

  • Letzter Besuch

Beiträge von Patrick.Karre

  1. Hallo Forum,

    ich muss ein MS-SQL-Statement schreiben, welches bestimmte Zeichen in einem Textfeld durch andere Zeichen (einen CRLF) ersetzt. Wie erstelle ich am besten dieses Update-Statement?

    Folgende Zeichenkette kann beliebig oft vorkommen und muss ersetzt werden: @@#@@. Dieses Zeichen soll durch einen Zeilenumbruch in einem NTEXT ersetzt werden.

    Beste Grüße aus Erlensee

    Patrick

  2. Hallo Forum,

    ich habe ein CListCtrl und lade darin ca. 50.000 Einträge. Leider ist der Aufbau sehr langsam und ich frage mich, ob dies Optimiert werden kann.

    Nachfolgend seht Ihr meinen Code, mit dem ich das CListCtrl beschreibe:

    
    // Überschrift setzen
    
    for (int i=0; i<m_strColumnName.GetCount(); ++i)
    
    	m_PersonalList.InsertColumn(i, m_strColumnName[i].GetString(), LVCFMT_LEFT, 500);
    
    
    // int iCounter = m_strListCtrl[i].GetCount();
    
    int iCounter = m_strColumnName.GetCount();
    
    
    // Liste mit Daten laden
    
    for (int i=0; i<m_strListCtrl.GetCount(); ++i)
    
    {
    
    	this->m_PersonalList.InsertItem(i, m_strListCtrl[i][0].GetString());
    
    
    	for (int j=0; j<m_strListCtrl[i].GetCount(); ++j)
    
    	this->m_PersonalList.SetItemText(i, j, m_strListCtrl[i][j].GetString());
    
    }
    
    
    Weiterhin würde ich gerne immer den ersten Satz markieren und markiert lassen, wenn der Fokus verlassen wird, aber irgendwie will das auch nicht klappen. Nachfolgend mein Code:
    
    // Erste Zeile markieren
    
    if (this->m_PersonalList.GetSelectionMark() == -1)
    
    	this->m_PersonalList.SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
    
    

    Beste Grüße aus Gießen

    Patrick

  3. Hallo Forum,

    ich muss ein SQL-Statement erstellen, in dem die Wochen (Datum Montag und Datum Sonntag) für ein Jahr komplett dargestellt wird. Ich habe schon ein Statement, welches mir die einzelnen Kalenderwochen zurück gibt, jetzt brauche ich nur noch von den jeweiligen Wochen den ersten und den letzten Tag.

    Hat jemand von euch eine Idee?

    Beste Grüße

    Patrick

  4. Habe ich mir mittlerweile auch gedacht, ich da in dem Programm bereits ca. 40 SQL-Statements genau so aufgebaut werden. Diese sind nur alle relativ kurz, daher gabes bisher keine Probleme.

    Hier findest Du die komplette Funktion:

    
    BSTR CKMPokoVIPSQLAddInCtrl::GetVIPSQLTableName(LPCTSTR bstrTableName, INT iTableType)
    
    {
    
    	CLSDatabase Database;
    
    	CTable Table;
    
    
    	CString strName, strTable, strTabelName, strSQLQuery;
    
    
    	switch(iTableType)
    
    	{
    
    	case 1:
    
    		strName		= "tblAS0000";
    
    		strTable	= "tblMasterAddrSets";
    
    		break;
    
    
    	case 2:
    
    		strName		= "EX0000";
    
    		strTable	= "tblMasterRelations";
    
    		break;
    
    
    	case 3:
    
    		strName		= "PJ0000";
    
    		strTable	= "tblMasterProjects";
    
    		break;
    
    	}
    
    
    	if (Database.Open(&m_strMSSQLUser, &m_strMSSQLPassword, &m_strMSSQLConnectionString))
    
    	{
    
    		CString strMSSQLStatement;
    
    		strMSSQLStatement.Format(_T("SELECT [T1].[Id]")
    
    								 _T("FROM [%s] AS [T1] ")
    
    								 _T("WHERE [Name]='%s' ")
    
    								 , strTable.GetString()
    
    								 , bstrTableName);
    
    
    		if (Database.Execute(&strMSSQLStatement, Table))
    
    		{
    
    			if (Table.ISEOF() == false)
    
    			{
    
    				Table.MoveFirst();
    
    
    				strTabelName = Table.Get("Id");
    
    				strTabelName = strName.Left(strName.GetLength() - strTabelName.GetLength()) + strTabelName;
    
    			}
    
    		}
    
    	}
    
    
    	return strTabelName.AllocSysString();
    
    }
    
    

    Hintergrund der Funktion ist, die Datenbank die angesteuert wird, ist durch Mastertabellen komplett dynamisch. Der Benutzer kann die internen Tabellennamen nciht kennen. Die Funktion liesst die internen Namen aus. Dadurch können die Codes auch auf andere Systeme portiert werden.

  5. Also, ich übergabe nur LONG und CString Felder.

    Ich habe noch einmal getestet ab wann genau abgeschnitten wird, leider variaert das noch wenn in den CSTRINGS längere und kürzere Texte vorhanden sind, daher ist es nicht möglich zu sagen, bei welchen Feld abgeschnitten wird. Es scheint aber an folgenden zu liegen:

    
    , dlg.m_strSeminarName.GetString()
    
    , atol(dlg.m_strSeminarVerpflegung.GetString())
    
    , dlg.m_strSeminarName.GetString() 
    
    , lUserId
    
    , strUserName.GetString()
    
    

    Es wurde mir gesagt, es könnt daran liegen, dass ich CSTRING in einen CSTRING eintragen möchte. Leider finde ich nicht im Internet was diese theorie bestätigen könnte.

  6. Ich habe mir die Länge jetzt direkt mit GETLENGHT zurück geben lassen und habe ein sehr interessantes Ergebnis. Je nachdem wieviele Zeichen ich am Anfang ergänze oder kürze verändert sich die Länge.

    Einmal 462 dann 506 dann 536.

    Es muss was mit der Formatierung zu tun haben, oder sehe ich das Falsch?

  7. Oh sorry, die Länge habe ich gestest indem ich einen kürzeren und längeren Text eingelesen habe, es wurde immer nur die gleiche Anzahl an Zeichen dargestellt.

    Ich rufe folgende Befehle aus:

    FORMAT

    GETSTRING

    ALLOCSYSSTRING

    Weitere Befehler rufe ich nciht aus, ein Beispiel kann ich leider auf die schnelle nciht fertig machen und die Codes darf ich nciht rausgeben, sorry.

  8. Also, ich wüsste jetzt nicht wo mein Fehler liegen könnten, aber nachfolgend findest Du den Code:

    
    CString strMSSQLStatement;
    
    strMSSQLStatement.Format(_T("SET ANSI_WARNINGS OFF; ")
    
    _T(" INSERT INTO [%s_%s] ")
    
    _T(" ( ")
    
    _T(" IdAddress, IdUserCreate, TimeCreate, OP_SeminarVon, OP_SeminarBis, OP_Seminarname, ")
    
    _T(" OP_Bestellnummer, OP_Verpflegung, OP_LaufendeNummer, OP_AngenommenVon, OP_AngenommenVonName ")
    
    _T(" ) ")
    
    _T(" VALUES ")
    
    _T(" (%d, %d, '%s', '%s', '%s', '%s', '%s', %d, %d, %d, '%s'); ")
    
    _T(" SET ANSI_WARNINGS ON; ")
    
    , CString(GetVIPSQLTableName(VIPTBL_KUNDEN, 1))
    
    , CString(GetVIPSQLTableName(VIPTBL_EX_KUNDEN_SEMINARBEWEGUNG, 2))
    
    , lAddressId
    
    , 1
    
    , szDate
    
    , dlg.m_strSeminarFrom.GetString()
    
    , dlg.m_strSeminarTo.GetString()
    
    , dlg.m_strSeminarName.GetString()
    
    , dlg.m_strSeminarName.GetString()
    
    , atol(dlg.m_strSeminarVerpflegung.GetString())
    
    , dlg.m_lSerialNumber
    
    , lUserId
    
    , strUserName.GetString());
    
    

    Vielleicht siehst Du ja den Fehler ;-(

  9. Hallo Klotzkopp,

    genau das ist das Problem. Es handelt sich um eine EXE-Datei. Das komplette Automationsmodell was ich brauche, ist dort drinnen.

    Bisher habe ich mehrere Wege versucht, hier ist mein letzter Versuch:

    
    CoInitialize(NULL);
    
    
    HRESULT hr;
    
    IUnknown* pIUVIPSQL;
    
    IDispatch* pIDVIPSQL;
    
    CLSID clsidAGVIPSQLApplication;
    
    
    if (SUCCEEDED(::CLSIDFromProgID(L"AGVIP.SQL.Application.1", &clsidAGVIPSQLApplication)))
    
    {
    
    	// Objekt von AG-VIP SQL besorgen
    
    	// Komplett neue Instant öffnen, darf aber nicht sein, dass Programm ist bereits offen!
    
    	hr = ::CoCreateInstance(clsidAGVIPSQLApplication, NULL, CLSCTX_ALL, IID_IDispatch, (void**)&pIDVIPSQL);
    
    
    	// Hier kommt immer, VORGANG NICHT VERFÜGBAR (AUCH WENN DAS PROGRAMM BEREITS OFFEN IST)
    
    	// Wenn eine Instance neu erzeugt worden ist, klappt allerdings der Aufruf
    
    	hr = ::GetActiveObject(clsidAGVIPSQLApplication, NULL, &pIUVIPSQL);
    
    
    	// Aktionen durchführen
    
    	// ...
    
    }
    
    
    // COM deinitialisieren
    
    CoUninitialize();
    
    

    Auf Irgendeinem Grund hatte er mit bei

    Application appTEST;

    appTEST->FUNKTIONEN

    die Funktionen von dem Programm mit appTest angezeigt, allerdings hatte ich einen Compilerfehler bekommen, dass Application unbekannt ist.

    Beste Grüße

    Patrick

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...