Autor Beitrag
mkmk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 20.07.08 14:45 
Aber Achtung, wenn du dich erstmal an diese Komponenten gewöhnt hast, willst du nicht mehr umsteigen :lol:

_________________
Markus Kinzler.
mkmk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: 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:

ausblenden 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;

   { Bei IBX hat dies folgende funktioniert: }
//      Edit1.Text := FieldByName('Vorname').Value;

    IBCTransaction1.Commit;
    IBCConnection1.Close;


Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: So 20.07.08 17:15 
Und der nächste bitte. :mrgreen: Ich empfehle dazu IB/FB-spezialisierte native Komponenten. Sprich : FIBplus und fertig. Sind keine 200 EUR vorhanden, dann eben Zeos.

_________________
Gruß
Hansa
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: So 20.07.08 18:33 
.... und was ist mit meiner eigentlichen Frage :) : wie zeige ich das Resultat an?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: So 20.07.08 18:42 
Danke Markus!
mkmk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: So 20.07.08 19:36 
Geduld! Es nur noch 998 Fragen :)

Wenn ich die Where-Bedingung direkt definiere
ausblenden 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

ausblenden 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 user profile iconUGrohne: Code- durch Delphi-Tags ersetzt
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 20.07.08 19:44 
Du musst den Parameter auch setzen:
ausblenden Delphi-Quelltext
1:
IBCQuery1.ParamByName('mynr').Value := mynr;					

Bei FoxPro wird automatisch eine gleichnamige Variable verwendet.

_________________
Markus Kinzler.
mkmk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: 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
ausblenden 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:
ausblenden Delphi-Quelltext
1:
2:
3:
IBCQuery1.ParamByName('Field_1').asWasAuchImmer := Edit_1.Text;
..
IBCQuery1.ParamByName('Field_x').asWasAuchImmer := Edit_x.Text;


?????

Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mo 21.07.08 08:19 
Nein du kannst auch datensensitive Controls z.B. DBEdits nehmen

_________________
Markus Kinzler.