Entwickler-Ecke
Datenbanken - Konsolenanwendung mit Datenbankanbindung
Doerne - Di 02.12.08 09:51
Titel: Konsolenanwendung mit Datenbankanbindung
Hi *,
Ich hätte hier noch eine Frage.
Besteht die Möglichkeit in einer Konsolenanwendung einen Zugriff
auf eine Interbasedatenbank zu reallisieren?
Wenn ja welche Klassen/Komponenten brauche ich dazu?
Gibt es ein Tutorial?
MFG
Doerne
Delete - Di 02.12.08 10:29
Prinzipiell ist das möglich, aber eine Menge Tipparbeit. Ich würde so vorgehen:
- Erstellung eines VCL-Testprogramms für den DB-Zugriff
- Notieren der verwendeten Units/Komponenten sowie der OI-Einstellungen für diesen Zugriff
- Einbinden dieser Units im Konsolenprogramm
- Dynamisches Erzeugen der Komponenten und Setzen der Properties wie notiert
Bei alledem musst Du natürlich sorgfältig arbeiten und kannst Dich nicht mehr auf Mechanismen der VCL verlassen. Insbesondere die Speicherverwaltung ist dann Deine Sache, da es ja keinen Owner geben kann, der die enthaltenen Objekte freigeben könnte.
delphiprogrammierer - Di 02.12.08 11:34
Hoi,
ich würde mir einfach ein DataModul erstellen und darin meine DB Komponenten, die ich benötige ablegen.
Gruss Delphiprogrammierer
Doerne - Mi 03.12.08 10:32
Hi *,
Ich bedanke mich erstmal für die Antworten.
Hier hab ich dann meine Lösung die auf einer lokalen Datenbank funktioniert.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158:
| uses DB_Module, DB, IBCustomDataSet, IBQuery, IBDatabase;
var MyDatabase: TIBDatabase; var MyTransaction: TIBTransaction; var MyQuery : TIBQuery;
function SQL_SelectREAD():String; begin try MyDatabase := TIBDatabase.Create(nil); except result := 'MyDatabase.create...ERROR'; end;
try MyTransaction := TIBTransaction.Create(nil); except result := 'MyTransaction.create...ERROR'; end;
try MyDatabase.DatabaseName := 'database\database.GDB'; except result := 'MyDatabase.DatabaseName_Error'; Exit; end;
try try MyDatabase.AddTransaction(MyTransaction); except result := 'MyDatabase.DefaultTransaction_Error'; Exit; end;
try MyTransaction.AddDatabase(MyDatabase); except result := 'MyTransaction.DefaultDatabase_Error'; Exit; end;
try MyTransaction.Params.Add('read_committed'); except result := 'MyTransaction.Params.Add(read_committed)_Error'; Exit; end;
try MyTransaction.Params.Add('rec_version'); except result := 'MyTransaction.Params.Add(rec_version)_Error'; Exit; end;
try MyTransaction.Params.Add('nowait'); except result := 'MyTransaction.Params.Add(nowait)_Error'; Exit; end;
try MyDatabase.Params.Values['USER_NAME']:='sysdba'; except result := 'MyDatabase.Params.Adduser_Error'; Exit; end;
try MyDatabase.Params.Values['PASSWORD']:='masterkey'; except result := 'MyDatabase.Params.Addpasswd_Error'; Exit; end;
try MyDatabase.LoginPrompt := false; except result := 'MyDatabase.LoginPrompt_Error'; Exit; end;
try MyDatabase.Connected := True; except result := 'MyDatabase.Connected_Error'; Exit; end;
try MyTransaction.Active := True; except result := 'MyDatabase.Connected_Error'; Exit; end;
try MyQuery:= TIBQuery.Create(nil); except result := 'MyQuery.create_Error'; Exit; end;
try MyQuery.Database := MyDatabase; except result := 'MyQuerry.Database_Error'; exit; end;
try MyQuery.Transaction := MyTransaction; except result := 'MyQuerry.Transaction_Error'; exit; end;
with MyQuery do begin try SQL.Clear; SQL.Add('SELECT * FROM personal'); except result := 'MyQuery.Select__Error'; exit; end; try open; if Not EOF then begin Close ; MyDatabase.Free; MyTransaction.Free; MyQuery.Free; result := 'Erfolg'; end; except result := 'Query_Error'; Exit; end; end; except result := 'ERROR'; end; end; |
Delete - Mi 03.12.08 10:56
Hast Du nun beide Vorschläge vermischt? Liest sich zumindest so. Aber wenn es funktioniert, ist das ja schon mal was ;) Allerdings solltest Du die Echtdaten (Verbindungsparameter) im Posting ersetzen, das macht sich nicht so gut. Und das Freigeben der Objekte solltest Du in jedem Fall erledigen, nicht nur bei Erfolg (wenn ich das richtig überflogen habe).
Doerne - Mi 03.12.08 11:00
Mit dem freigeben des Speichers hast du Recht, das hab ich übersehen.
Danke für den Hinweis.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!