Autor |
Beitrag |
mkmk
      
Beiträge: 23
|
Verfasst: So 20.07.08 10:59
Servus allerseits
Ich arbeite seit nun 3 Wochen mit Delphi und bin nun beim Thema Database angelangt.
Bis anhin hatte ich mit "Visual FoxPro" via ODBC auf Firebird (2.0.3) zugegriffen.
Mit Delphi will ich nicht den Umweg über ODBC machen, sondern die native Komponenten benutzen.
Ich habe nun 1000 Fragen; aber die würde keiner lesen. Deshalb Schritt für Schritt.
In dieser Phase des Herumprobierens würde ich - wenn möglich - die Boardmittel von Delhphi 11 benutzen. Geht das? Auf Geschwindigkeit, Transaction und so kommt es mir z.Zt. nicht an.
Ich frage deshalb, weil ich beim Durchblaettern im Forum den Eindruck gewann, dass manche Komponenten Firebird 2 nicht unterstützen.
Und als ich dann nach dem Motto "auch ein blindes Huhn findet hin und wieder ein Korn" die TDatabase Komponente von BDE auf die Form zog und mit Rechtsklick die Werte eintragen wollte, kam es beim Aufklappen von 'Driver name' zu einer Fehlermeldung: er könne die Borland Database Engine nicht initialiseren.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 20.07.08 11:41
Mit Bordmitteln: IBX, dbExpress, Ado
OpenSource-Fremdkomponenten: Zeos, UIB, FBLib, MDO, FreeIB, ...
Freeware: AnyDAC1
Kommerziell. IBDAC, FIBplus, IboObjects, AnyDAC2
_________________ Markus Kinzler.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: So 20.07.08 11:57
Bordmittel sind nur bedingt zu empfehlen. Sofern es um volle Unterstützung von FB 2 geht, dann scheidet zumindest IBX schon aus. Für freie Komponenten (Zeos + Konsorten) gilt ähnliches.
_________________ Gruß
Hansa
|
|
mkmk 
      
Beiträge: 23
|
Verfasst: So 20.07.08 13:51
Zeos habe ich versucht. Aber dieser scheint FB 2.0 nicht zu unterstützen (wie auch Hansa bereits geschrieben hat).
Mit IBX habe ich ein paar Versuche gemacht; hatte bis anhin keine Probleme. Aber meine Tests beschraenkten sich bis anhin auf ein paar SELECT's.
IBObject scheint seit August 2007 keine weitere Release erfahren zu haben, was mir nicht ganz koscher ist.
IBDAC wird hingegen mit Releases geradezu erschlagen, was mir auch nicht ganz geheuer ist; der Preis mit USD 100 waere aber durchaus akzeptabel.
FibPlus: kosten so um die 300 USD. Für jemanden, der seine ersten Streifzüge durch Delphi macht, sicherlich nicht die Ideallösung
Kann ich mit IBX weitermachen? Oder werde ich damit sehr schnell auf die Nase fallen?
Mit geht es zur Zeit nur darum, den Zusammenhang der Komponenten zu verstehen.
Bei ODBC hat man nur 3 Funktionen: SQLCONNECT, SQLEXEC und SQLDISCONNECT.
Aber hier bei Delphi reiht sich eine Komponente hinter die andere.
Kann ich mit IBX weitermachen?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 20.07.08 14:33
Zitat: | Kann ich mit IBX weitermachen? |
Jein. Wenn du auf gewisse neue Features von FB verzichten kannst ( RETURNING, ...)
Ich selber verwende IBDAC und bin sehr zufrieden.
_________________ Markus Kinzler.
|
|
mkmk 
      
Beiträge: 23
|
Verfasst: So 20.07.08 14:44
Okay, versuchen geht in manchne Faellen über studieren. Vorallem wenn man nicht einmal weiss, worüber man sich den Kopf zerbrechen soll.
Zu allem hat Ibdac anscheinend auch noch eine 60 Tage dauernde Testzeit, was auch ganz nett ist.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 20.07.08 14:45
Aber Achtung, wenn du dich erstmal an diese Komponenten gewöhnt hast, willst du nicht mehr umsteigen 
_________________ Markus Kinzler.
|
|
mkmk 
      
Beiträge: 23
|
Verfasst: So 20.07.08 17:07
Kann mir jemand weiterhelfen. Ich habe jetzt mal IBDAC installiert und etwas herumgespielt. Aber ich schaffe es nicht, das Resultat der Query in einem TEdit anzuzeigen.
Was ich gemacht habe:
Die Komponenten TIBCConnection, TIBCTransaction und TIBSQL auf die Form gezogen.
Und dann folgenden Code geschrieben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| IBCConnection1.Database := 'E:\\Data\\MyDocs\\Data\\Firebird\\PDB.FDB'; IBCConnection1.Params.Clear(); IBCConnection1.Params.Append('USER_NAME ''PSUSER'''); IBCConnection1.Params.Append('PASSWORD ''P123'''); IBCConnection1.LoginPrompt := false; IBCConnection1.Open; IF IBCConnection1.Connected <> TRUE Then begin ShowMessage('NICHT Verbunden'); exit; end;
IBCTransaction1.StartTransaction; IBCSQL1.SQL.Clear; IBCSQL1.SQL.Add('Select * from Personal '); IBCSQL1.Execute;
IBCTransaction1.Commit; IBCConnection1.Close; |
Moderiert von UGrohne: Code- durch Delphi-Tags ersetzt
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: So 20.07.08 17:15
Und der nächste bitte.  Ich empfehle dazu IB/FB-spezialisierte native Komponenten. Sprich : FIBplus und fertig. Sind keine 200 EUR vorhanden, dann eben Zeos.
_________________ Gruß
Hansa
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 20.07.08 17:16
TIBCSQL dient zur Ausführung von Skripten. Verwende TIBCQuery, welches TIBDataSet entspricht
Ausserdem musst du .Open verwenden, das eine Datenmenge zurückgeliefert wird
@hansa, IBDac steht für InterBase Direct Access Components ...
_________________ Markus Kinzler.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: So 20.07.08 18:25
Ist halt Geschmacksfrage. Wenn mehrere DBs unterstützt werden sollen, dann ist die Frage, welche zuerst hinten runterfällt. IMHO sind da spezialisierte besser.
_________________ Gruß
Hansa
|
|
mkmk 
      
Beiträge: 23
|
Verfasst: So 20.07.08 18:33
.... und was ist mit meiner eigentlichen Frage  : wie zeige ich das Resultat an?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 20.07.08 18:36
Genauso, Query.FieldByName('<Feldname'>.Value bzw. Query.FieldByName('<Feldname'>.as<Typ>
Zitat: | Ist halt Geschmacksfrage. Wenn mehrere DBs unterstützt werden sollen, dann ist die Frage, welche zuerst hinten runterfällt. IMHO sind da spezialisierte besser. |
IBDAC sind spezielle Interbase Komponenten. Das der Hersteller auch andere Komponenten für MySQL, MSSQL, Oracle entwickelt und die Komponenten spezielle Fähigkeiten mit den anderen Komponenten teilen, andert an dieser Tatsache nichts!
[Edit: Tippfehler entfernt]
_________________ Markus Kinzler.
Zuletzt bearbeitet von mkinzler am So 20.07.08 18:44, insgesamt 1-mal bearbeitet
|
|
mkmk 
      
Beiträge: 23
|
Verfasst: So 20.07.08 18:42
|
|
mkmk 
      
Beiträge: 23
|
Verfasst: So 20.07.08 19:36
Geduld! Es nur noch 998 Fragen
Wenn ich die Where-Bedingung direkt definiere
Delphi-Quelltext 1: 2: 3:
| IBCQuery1.SQL.Clear; IBCSQL1.SQL.Add('Select * from Personal Where idnr = 1'); IBCQuery1.Open; |
krieg ich das gewünchte Resultat.
Wenn ich aber eine integer Zahl mynr einsetzte, kommt als es zwar zu keinem Fehler, aber auch zu keinem Resultat
Delphi-Quelltext 1: 2: 3: 4:
| mynr := 1; IBCQuery1.SQL.Clear; IBCSQL1.SQL.Add('Select * from Personal Where idnr = :mynr'); IBCQuery1.Open; |
Wo mache ich was falsch.
Moderiert von UGrohne: Code- durch Delphi-Tags ersetzt
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 20.07.08 19:44
Du musst den Parameter auch setzen:
Delphi-Quelltext 1:
| IBCQuery1.ParamByName('mynr').Value := mynr; |
Bei FoxPro wird automatisch eine gleichnamige Variable verwendet.
_________________ Markus Kinzler.
|
|
mkmk 
      
Beiträge: 23
|
Verfasst: So 20.07.08 20:08
Herzlichen Dank für die prompte Hilfe. Jetzt klappt's.
Das Ganze scheint auf den ersten Blick recht kompliziert zu sein. Zumindest komplizierter, als ich es mir vorgestellt hatte. Ein Projekt mit Schwergewicht Datenverarbeitung wird vermutlich zu einer regelrechten Schreib-Orgie ausarten.
Werde mal jetzt jede Zeile anhand des Manuals nochmals durchgehen.
Schönen Abend
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 20.07.08 20:16
Nicht unbedingt. Man kann auch vieles auf die Datenbank verlagern und sich vieles auch generieren lassen
_________________ Markus Kinzler.
|
|
mkmk 
      
Beiträge: 23
|
Verfasst: Mo 21.07.08 08:11
...
( mit aufgerissenen Augen und Panik in der Stimme ..... )
Heisst das, dass ich bei einer Datei mit x Feldern x-mal
Delphi-Quelltext 1: 2: 3:
| Edit_1.Text := IBCQuery1.FieldByName('Field_1').asWasAuchImmer; .. Edit_x.Text := IBCQuery1.FieldByName('Field_x').asWasAuchImmer; |
schreiben muss?
Und beim Abspeichern:
Delphi-Quelltext 1: 2: 3:
| IBCQuery1.ParamByName('Field_1').asWasAuchImmer := Edit_1.Text; .. IBCQuery1.ParamByName('Field_x').asWasAuchImmer := Edit_x.Text; |
?????
Moderiert von UGrohne: Code- durch Delphi-Tags ersetzt
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 21.07.08 08:19
Nein du kannst auch datensensitive Controls z.B. DBEdits nehmen
_________________ Markus Kinzler.
|
|