DB Zugriff via ADO bringt Fehler? Evt. anderer Zugriff?



  • Das ist es ja ich hab eigendlich keinen Code ich hab nur die oben genannte Anleitung befolgt und die Einzelnen Elemente auf meine Unit gezogen, die DataSource und co immer in den Eigenschaften eingetragen die Tabelle in den Eigenschaften ausgewählt und das wars. Kein bisschen Code hab ich da drin. Deswegen wunderts mich ja und in der Designansicht gehts ja auch aber wenn ich es Compiliere und ausführe dann wills nimmer dann bringt er den Fehler.
    Gibts da nicht ne möglichkeit das ganze von Hand zu programmieren ohne das ADo zeugs so das ich den Fehler lokalisieren kann???
    Weiß auch jemand ein Beispiel wie man sowas realisieren kann??

    Gruß

    Maruu



  • Hi,

    vorweg muss ich gestehen, dass ich keine praktische Erfahrung mit ADO habe.

    Aber ersetz versuchsweise ADOTable durch ADODataSet. Da muß es irgenwo etwas zum Eingegen von SQL geben (CommandText oder so ähnlich). Dort schreibst Du dann

    SELECT * FROM <tabellenname>
    

    rein. Nach allesm was ich so gelesen habe sollte man vorzugsweise ADODataSet verwenden.


  • Mod

    Hallo

    ich wuerde es so machen

    ADOConnection->ADOQuery->DataSet

    - ADOConnection einstellen
    - ADOQuery mit ADOConnection verbinden
    - DataSet mit ADOQuery verbinden
    - zB DBGrid mit DataSet verbinden
    - ADOQuery mint SLQ-String fuettern
    - ADOQuery->Open ....

    machst du das auch so ?
    oder wie machst du es ?

    MfG
    Klaus



  • Hallo!

    Ok jetzt geht es erstmal!

    Was ich gemacht hab ist:
    ADOConnection
    ADOQuery
    DataSource
    ADOTable

    So die hab ich dann untereinander Verbunden und mach dann z.B. ne Abfrage:
    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("SELECT * FROM FK_Auftrag");
    ADOQuery1->Open();
    Edit1->Text=ADOQuery1->FieldByName("Anschrift_Ansprech")->AsString;

    nach betätigung eines Buttons.
    Nun hab ich aber noch folgendes Problem:
    Öffne ich mit MS Access die Datenbank per ODBC dann gibts es da mehrere Tabellen. Zwei davon heisen F1_FK_Auftrag und F2_FK_Auftrag aber wenn ich bei ADOTable unter der Eigenschaft TableName schaue dann steht da zwei mal FK_Auftrag hintereinander also

    FK_Auftrag
    FK_Auftrag

    anstatt

    F1_FK_Auftrag
    F2_FK_Auftrag

    Woher weiß ich welche welche ist und wie kann ich die unterschiedlich anwählen?
    Auch eine SQL Abfrage z.B. mit
    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("SELECT * FROM F1_FK_Auftrag");
    ADOQuery1->Open();
    Edit1->Text=ADOQuery1->FieldByName("Anschrift_Ansprech")->AsString;

    geht nicht da muss FK_Auftrag stehen.
    Ich verzweifle echt.
    Kann mir jemand helfen??

    MFG

    Maruu



  • So hi!

    Das mit den Tabellen hat sich erledigt das wird über den Benutzername geregeltt sorry.
    Aber eine andere Frage. Gibt es eine andere möglichkeit als ADO die ODBC Treiber zu verwenden???
    Ich hab nämlich das Problem das mir bei einer falschen Abfrage o.ä. immer das ganze Programm abschmiert und das würde ich gern abfangen nur scheint mir das nicht ganz so leicht, oder?
    Naja und ich hab erlich gesagt auch kein plan ob es irgendwie machbar ist bei ADO den Connection String irgendwie zu verändern also z.B. Benutzername und ODBC Treiber und so geht das???? und wenn ja wie?

    Mir wäre sowas wie bei z.B. der MySQL-Api lieber wo ich in C, C++ ganz schön meinen Code basteln könnte mit Verbindung Initialisieren, Verbindung herstellen, Abfrage starten, Verbindung beenden.
    Gibts sowas nicht auch für die gnazen ODBC Treiber um diese anzusprechen?
    Ich hab mal was von recordset gelesen weiß aber nicht ob das damit zu tuin hat.

    Gruß

    Maruu


  • Mod

    Hallo

    das haengt davon ab ob es fuer deine DB (???) eine API gibt

    bei falscher Abfrage das ganze Programm abschmiert

    das deutet aber eher auf einen Fehle rin deinem Programm hin

    MfG
    Klaus



  • Ne api gibts leider keine nur den ODBC Treiber. Gibt irgendwo gute Anleitungen zu ADO ich denke mal das dann ADO wohl meine einzige möglichkeit is oder???

    MFG

    Maruu



  • Ich möchte noch einmal darauf hinweisen, dass TADOQuery und TADOTable nur Kompabilitätskomponenten sind. In neuen Programmen haben die nichts zu suchen! Versuch doch bitte mal TADODataSet. Sollte es dann immer noch Probleme geben, liegt wohl tatsächlich ein Programmfehler vor. Aber dann müßtest Du mal ein bißchen mehr Source posten. Insbesondere die Stelle, an der es crasht.

    Welche DB wird denn verwendet. Teilweise haben auch die ODBC-Treiber ihre Eigenheiten.

    Maruu schrieb:

    Ich hab nämlich das Problem das mir bei einer falschen Abfrage o.ä. immer das ganze Programm abschmiert und das würde ich gern abfangen nur scheint mir das nicht ganz so leicht, oder?

    Was verstehst Du unter falscher Abfrage?



  • Joe_M. schrieb:

    Ich möchte noch einmal darauf hinweisen, dass TADOQuery und TADOTable nur Kompabilitätskomponenten sind. In neuen Programmen haben die nichts zu suchen!

    Könntest du mir bitte die Quellangaben liefern, wie du darauf kommst das TADOQuery und TADOTable Kompabilitätskomponenten sind?

    Den mit TADODataSet kann man nur lesbare SELECT Abfragen starten,
    dazu Quellangaben aus der BCB Hilfe

    Use the TADODataSet component's CommandText property to retrieve the dataset, specifying either a table name or an SQL statement (SELECT only). TADODataSet is not capable of issuing Data Manipulation Language (DML) SQL statements that do not return result sets (like DELETE, INSERT, and UPDATE). For this use a component like TADOCommand or TADOQuery.

    TADOQuery und TADOTable unterstützen les- und schreibbaren Zugriff auf die Abfragen/Tabellen, also haben sie ihre Daseinsberechtigung!



  • Quelle: Andreas Kosch... (der hat da schon ein paar Bücher drüber geschrieben)

    TADOQuery und TADOTable sollen einem nur die Umstellung eines bestehenden Projektes, welches mit TQuery oder TTable erstellt wurde, erleichtern.



  • TADODataSet is not capable of issuing Data Manipulation Language (DML) SQL statements that do not return result sets (like DELETE, INSERT, and UPDATE). For this use a component like TADOCommand or TADOQuery.

    ok dann muss wohl Borland einen Fehler in der Hilfe-Datei haben :p
    und ich schon die ganze zeit Müll geschrieben haben 😉



  • Da geht es aber um DML und nicht um Resultsets... Und für DML ich würde TADOCommand nehmen.



  • na siehste und ich nehme TADOQuery für alles 😉



  • ja aber Du verwendest TADOQuery um Daten abzufragen (ein Result Set zu erhalten). In dem zitierten Hifetext steht aber man sollte TADOQuery oder TADOCommand verwenden um Daten zu modifizieren...



  • Joe_M. schrieb:

    ja aber Du verwendest TADOQuery um Daten abzufragen (ein Result Set zu erhalten). In dem zitierten Hifetext steht aber man sollte TADOQuery oder TADOCommand verwenden um Daten zu modifizieren...

    so TADOQuery aus der BCB-Hilfe

    Use TADOQuery to access one or more tables in a data store using SQL statements.
    Retrieve data from tables in an ADO data store using SELECT statements. Perform actions on tables and other metadata objects in an ADO data store with statements like INSERT, DELETE, UPDATE, ALTER TABLE, and CREATE TABLE. Execute stored procedures.

    Mit TADOQuery geht alles, also was mache ich jetzt falsch, wenn ich immer TADOQuery benutze, im Bezug auf die andere von dir favorisierten Komponenten?



  • Man kann schon mit TADOQuery arbeiten, aber es besteht die Möglichkeit, dass sich das später rächt... Warum nicht von Anfang an die richtigen Komponenten verwenden, statt mit Kompabilitätskomponenten zu arbeiten. Wenn Du dann irgendwann mal den Punkt erreicht hast, an dem TADOQuery Probleme bereitet ist das nur mit viel Aufwand zu ändern. Warum sich solch einmem Risiko aussetzen?



  • Joe_M. schrieb:

    Man kann schon mit TADOQuery arbeiten, aber es besteht die Möglichkeit, dass sich das später rächt...

    Wenn es darum geht, dürfte man gar nicht mehr den BCB mit den VCL benutzen,
    da die Zukunft des BCB nicht grade vielversprechend ist.



  • Hey, das war nur ein gut gemeinter Rat...
    Wenn Du unbedingt TADOQuery verwenden willst - bitte schön, hab' ich nix gegen. Aber wie gesagt es kann sich später bitter rächen. Und damit meine ich nicht in der nächsten BCB-Version (so es denn noch eine geben wird), sondern später im Projekt.



  • Jetzt rück halt endlich mit den Fakten raus wann es sich rächt?

    Ich benutze jetzt ADO-Express mit ACCESS-DB und MySQL seit 2000
    und du machst mir jetzt wirklich ANGST 😮



  • Ich weiß gar nicht, ob man hier auf andere Foren verweisen darf 🙂 : www.entwickler-forum.de. Da gibt's genug Beispiele...


Anmelden zum Antworten