Zum Inhalt springen

Patrick.Karre

Mitglieder
  • Gesamte Inhalte

    668
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte 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 Zusammen, das mit der virtuellen Liste war eine Super Idee, dass CListCtrl ist jetzt richtig schnell. Danke und beste Grüße aus Gießen Patrick
  3. 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
  4. Hallo Forum, wie kann ich in C++ eine RTF Datei erzeugen und mit Daten füllen? Beste Grüße aus Münster Patrick
  5. Ja generell eine gute Idee, aber das ganze sollte vom Jahr unabhängig sein. Ich hatte nur 2008 als Beispielt gegeben. Das heisst, ich kenne den ersten Montag für die folgende Jahre nicht. Wie kann ich die Funktion universeller schreiben?
  6. Hallo Forum, ich habe folgendes Problem: Ich habe eine Kalenderwoche im Jahr 2008. Jetzt brauche ich davon das Anfangsdatum (Montag) und Enddatum (Sonntag). Wie bekommen ich dies am besten unter C++ hin? Beste Grüße Patrick
  7. Du hattest recht, ich bin noch mal alles durchgegangen. Nachdem ich die Rückgaben der Unterfunktionen angepasst habe, geht alles. Vielen Dank. Patrick
  8. 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
  9. Stimmt, war keine gute Idee. Hahe die Rückgabe auf CString geändert. Leidergab es keine Abhilfe für das Problem, der String wird immer noch abgeschnitten. Ansonsten sind die Konventionen eingehalten. Kein BSTR als Rückgabe.
  10. 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.
  11. 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.
  12. Selbstverständlich ist mir das in den Sinn gekommen, aber ich finde einfach den Fehler nicht ;-(
  13. Das habe ich relativ Primitiv gemacht, ich habe vor dem ersten % Zeichen einfach weitere Buchstaben eingefügt bzw. entfernt. Dadurch wurde die Länge mehr bzw. weniger.
  14. 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?
  15. 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.
  16. Kann es sein, dass der Fehler darin besteht, dass ich %s mit einem CString fülle?
  17. ICh verwende zwar CString, aber genau so, wie Du ihn sieht. Wie kann ich den Buffer erhöhen? Was müsste ich machen?
  18. Der String wird nach einer bestimmte Länge abgeschnitten, das habe ich schon getestet. Der Aufruf ist wie Du ihn sieht, ich rufe keine anderen Funktionen vorweg auf.
  19. 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 ;-(
  20. Hallo Forum, ich verwende einen CString um Textinhalte zusammen zu setzen. Leider bekomme ich nciht den kompletten Text in eine Variable von CString rein, daher stellt sich meine Frage, ob es eine andere Möglichkeit gibt einen String zu speichern. Beste Grüße Patrick
  21. Am besten startest Du das VS2005 unter Vista immer als Administrator. Ansonsten kann es unerwünschte Nebeneffekte geben.
  22. Okay, das sich der Import nur zur Compilerzeit auswirkt wusste ich nicht. Wenn ich den #import verwende, wie kann ich dann auf die Objekte zugreifen und mir das bestehende Objekt holen?
  23. Hallo Klotzkopp, das Problem ist, das Programm liegt nicht auf jedem Rechner im gleichen Verzeichnis. Daher kann ich #import nicht verwenden. Wie müsste ich alternativ vorgehen? Ich muss leider sagen, dass ich in C++ noch nie ein Objekt auf ein anderes Programm erstellt habe, daher auch die Fragen. Beste Grüße Patrick
  24. 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...