Datenbankzugriff mit Konsolenprogramm
-
Hi,
ich Versuche hier unter Borland C++ Builder in einer Konsolenanwendungen einige Datenbankzugriffe auszuführen, bekomme aber immer Fehlermeldungen wegen Zugriffsverletzungen.
Nun hatte ich, bevor ich das Konsolenprogramm geschrieben habe, stets ein GUI Programm mit einem einfachen Fenster zum üben erstellt.
In diesem Fenster habe ich z.B. einen Butten bei dem durch Druck nur folgende Programmzeile ausgeführt wird:DataModule1->Table1->First();
Drücke ich den Button, wird der Zeiger wie gewünscht an den Beginn der Tabelle gesetzt.
Nun habe ich versucht die gleiche Programmzeile in der Main-Funktion meiner Konsolen-Anwendung einzufügen.
Nun bekomme ich allerdings, sobald dieser Programmteil aufgerufen wird, jedesmal einen Fehler aufgrund einer Zugriffsverletzung.Im Konsolen-Programm habe ich genauso wie auch vorher im Übungsprogramm zusätzlich das Datenmodul eingefügt.
Ich vermute, dass ich da noch irgendwelche grundlegenden Fehler im Verständnis habe.
Wäre echt super wenn mir hier einer weiterhelfen könnte.Gruß
Sera
-
Im Konsolen-Programm habe ich genauso wie auch vorher im Übungsprogramm zusätzlich das Datenmodul eingefügt.
Wie ? Was ?
Code ?
-
Hallo
Das DataModul muß mit sicherheit noch mit new erstellt und initialisiert werden.
bis bald
akari
-
Glaskugel zur Hand ?
-
Sorry, ich versuch mal den unwesentlichen Programmteil rauszuschmeissen, weils sonst zu lang wird

main.cpp
#include <windows.h> #include <stdlib.h> #include <conio.h> #include <iostream.h> #include <stdio.h> #pragma hdrstop #include "Datenmodul.h" int main() { DataModule1->Table1->First(); // auf ersten Datensatz in der DB }Der rest ist jetzt rausgeschnitten, weil bereits beim diesem ersten Befehl das Problem auftritt.
Datenmodul.h
#ifndef DatenmodulH #define DatenmodulH #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <Db.hpp> #include <DBTables.hpp> class TDM1 : public TDataModule { __published: // Von der IDE verwaltete Komponenten TDataSource *DataSource1; TTable *Table1; TSmallintField *Nummer; TSmallintField *Inhalt; private: // Anwender-Deklarationen public: // Anwender-Deklarationen __fastcall TDM1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TDM1 *DataModule1; //--------------------------------------------------------------------------- #endifDataModule1 liefert NULL zurück, daher dann auch die Zugriffsverletzung.
Die Frage wäre quasi, was ich Depp vergessen/übersehen habe damit DataModule1 auf eine vernünftige Adresse/position zeigt.Danke schonmal!!
Gruß
Sera
-
Nun los Jungs.
Wer wirft den ersten Stein ?Mal im ernst. Du mischst da einfach per Copy & Paste was zusammen.
Du hast in deinem Datenmodul nur Zeiger auf Objekte mit denen du auf eine Datenbank zugreifen könntest, wenn du diese erstmal initialisieren würdest.Dazu müsstest du deinem Datenmodul aber dann auch noch verraten, auf welche Datenbank du gerne zugreifen möchtest.
Und dann sollte deine Table auch noch möglichst erstmal eine Tabelle kennen, bevor du versuchst auf den ersten Datensatz zu springen.
Dazu inkludierst du noch alles mögliche was überhaupt nicht gebraucht wird.
Du hast genau den falschen Weg genommen.(Erst GUI und dann Konsole)
Bester Rat:Eigne dir erstmal Grundlagen in der Konsole an.
-
Wenn man nur mal richtig lesen würde...
Seraphim schrieb:
Sorry, ich versuch mal den unwesentlichen Programmteil rauszuschmeissen, weils sonst zu lang wird

-
Rostfrei[] schrieb:
Wenn man nur mal richtig lesen würde...
Seraphim schrieb:
Sorry, ich versuch mal den unwesentlichen Programmteil rauszuschmeissen, weils sonst zu lang wird

Dann hat er wohl eher den wesentlichen Programmteil rausgeschmissen.
-
GlassSphere.Use(random);
-
Danke für die konstruktive Hilfe!

Leider bin ich wohl zu blöd gewesen eine Doku zu finden in der der Umgang mit Datenbanken bei der Konsole erklärt wird, daher habe ich das zuerst in der GUI machen müssen.
Vielleicht ist ja auch jemand so lieb mir einfach zu erklären was ich jetzt falsch gemacht habe, statt einfach nur Steine zu werfen.
Ich würde hier nicht fragen wenn ich schon alles wüsste.
Gruß
Sera