SQLite Result in Array speichern
-
Hallo zusammen,
dies ist mein erster Post in diesem Forum....
Kurz zu mir, ich bin zwar zeit gut 10 Jahren beruflich Softwareentwickler, aber ich komme aus einem ganz anderen Bereich. Also würde ich mich beim Thema C++ als Einsteiger/Umsteiger betrachten.
Jedenfalls habe ich noch einige Gehschwierigkeiten, die mich manchmal selbst staunen lassenZu meinem aktuellen Problem:
Ich möchte eigentlich nur Daten aus einer SQLite in einem Array zwischenspeichern, um die Daten in einer anderen Funktion zu verwenden. Aber auch diesmal scheint das Problem vor der Tastatur zu sitzen.
Hier mal ein paar CodefetzenHier die Deklaration im Header:
class PopupGR{ public: char *Captions[8+1]; char *pszKto[8+1][15+1]; int HGItemCount; int SubItemCountKto[8]; } PG;
Und hier die Funktionen, wo ich "versuche" die Daten von SQLResult zu übernehmen.
void TFormBuchen::SQLResultHG(int col, char **row, char **azColName) { for(int i = 0; i < col; i++) { if(i == 2) { PG.Captions[PG.HGItemCount] = row[i]; } } PG.HGItemCount++; } //--------------------------------------------------------------------------- void TFormBuchen::SQLResultKto(int KtoNr, int col, char **row, char **azColName) { for(int i = 0; i < col; i++) { if(i == 2) { PG.pszKto[PG.SubItemCountKto[KtoNr-1]][i] = row[i]; } } PG.SubItemCountKto[KtoNr-1]++; }
Wenn ich mir direkt in diesen Funktionen das Ergebnis im Array anschaue, sind die Daten wohl geschrieben. Für mich erstaunlich, das ich in einer anderen Funktion nicht darauf zugreifen kann. Da steht dann NULL im Array...
Schon mal vielen Dank für eure Antworten
Gruß
Matthias
-
Das fliegt dir immer um die Ohren. In
popupGR
speicherst du nur die Zeiger auf die Strings im aktuellen Datensatz, wenn der Datensatz zerstört wird zerstört er seinen internen Puffer gleich mit. Damit hast du gleich mehrere dangling Pointer, die irgendwohin zeigern, nur nicht auf gültige Daten.
Ersetz´ deinechar* []
durchstd::array<std::string,9>
undstd::array<std::array<std::string,16>,9>
bzw. durchstd::string Captions[9]
undstd::string Kto[9][16]
.Vermutlich erleichtert die ein C++ Wrapper für die SQLite C-API, da gibt´s einige.
-
Benutzt du tasächlich VCL (C++ Builder) oder bist du im falschen Forum?
-
Erstmal Danke für die schnelle Antwort...
Werde es nachher direkt umsetzenJa , ist tatsächlich eine antiquirte Version 6 vom C++ Builder
Aber ich mag das Teil
-
@MHage
Dann vergiss alles, was ich geschrieben habe. Das Ding ist ja nicht mal kompatibel zu sich selbst.std::array
kam mit C++11, das kennt der BCB 6 nicht- 3rd Party Libraries mit dem BCB 6 zu übersetzen ist ein Glücksspiel, da der Compiler sich nicht an den Sprachstandard hält. Du kannst Glück haben, dass er erfolgreich übersetzt, aber wahrscheinlich kann er´s nicht.
-
@MHage sagte in SQLite Result in Array speichern:
Erstmal Danke für die schnelle Antwort...
Werde es nachher direkt umsetzenJa , ist tatsächlich eine antiquirte Version 6 vom C++ Builder
Aber ich mag das TeilIch mochte das Teil auch, aber irgendwann muss man Abschied nehmen. Und der Zeitpunkt war vor 10 Jahren
-
@DocShoe
Und doch ist das Problem gelöst, und dein Beitrag hat mich in die richtige Richtung geschubst...@It0101
Ja, ich weiß... Habe die 10.3 Community ebenfalls installiert.