SQL - Zugriff, evtl. sogar ohne BDE
Hi,
auf Datenbanken habe ich bisher nur in PHP zugegriffen und bin deshalb, etwas verwöhnt, was das betrifft. Nun suche ich nach einer möglichst einfachen Möglichkeit, auf einen MS-SQL Server aus meinem Delphi-Code heraus zuzugreifen. Bisher habe ich TQuery verwendet und es sieht so aus, als würde alles funktionieren! Aber nun möchte ich irgendwie an die Rückgabewerte meines Select kommen und die banale Frage, wie ich das anstelle, beschäftigt mich nun schon eine ganze Weile :oops: PS: Hat irgendjemand vielleicht eine Idee, wie ich relativ einfach sogar ohne BDE zugreifen kann?? |
Hi,
es gibt im Netz freie Komponenten für die Zugriffe auf diverse Datenbanken. Ich habe selber schon mal Kompos von zeos verwendet. Leider habe ich momentan die Adresse nicht parat. Wenn Deine Suche wenig Erfolg hat, gib Bescheid. Dann frag ich einen Bekanten der die Adresse bestimmt noch hat. Über google mit dem Stichwort zeos kommst du auf jeden Fall weiter. Schau aber genau ob die Kompos frei sind. Gruß oki |
ganz einfach:
nimm eine TSQLQuery mit
Delphi-Quellcode:
holst du dir die daten
SQLQuery1.SQL.Add('SELECT spalte FROM tabelle');
in ne variable bekommst du sie mit
Delphi-Quellcode:
die funktion liefert nen variant zurück, du kannst also als VARIABLE String nehmen oder wenn du Zahlen hast Integer/Real --> wird automatisch erkannt
SQLQuery1.Open;
SQLQuery1.First; variable:= SQLQuery.FieldValues['spalte']; |
Es ist ganz einfach:
Nach Ausführen einer SQL-Anweisung, ist die Query mit dem Ergebnis dieser Abfrage gefüllt. Man kann dann die Query als Tabelle betrachen (was sie nicht natürlich nicht ist) und jeden Datensatz auswerten. Bei keinem Ergenis ist die Query leer! |
Guten Morgen und vielen Dank für die Info, so sollte es funktionieren!
Allerdings habe ich jetzt ein weiteres Problem: In der Zeile
Code:
bricht meine Anwendung mit einem Fehler ab und ich habe im Moment keine Idee, woran das liegen könnte. GetWord gibt im übrigen einen Wert zurück, die Funktion funktioniert also fehlerfrei.
Form1.Query.SQL.Add('SELECT Info FROM Tab1 WHERE ID='+GetWord(sIncome, 'nx', 1));
Was mir außerdem noch aufgefallen ist, ist die Tatsache, dass jedesmal, wenn meine Anwendung eine Verbindung zur Datenbank herstellt, ein Fenster erscheint, in dem ich zur Eingabe des Kennwortes aufgefordert werde. Kann ich dieses Fenster irgendwie umgehen, indem ich die Daten direkt in den Code schreibe? :coder: |
Naja, ich muss meine Aussage von eben etwas korrigieren, die Exception tritt bei "Query.Open;" auf, ich kann den Fehler also doch nicht so genau lokalisieren, wie ich das eben noch dachte!
|
Zitat:
|
Im OI existiert bei mir keine Eigenschaft "LoginPrompt", kann das sein??
Ich habe eine Komponente TQuery in meinem Formular und unter Databasename verweise ich auf ein Alias. Fehlt mir da noch eine zweite Komponente? |
Hallo Evilboyz,
wenn ich nicht irre, greifst Du auf einen MS-SQL-Server zu. Da Du die Enterprise-Version von Delphi 5 hast, würde ich Dir empfehlen, die ADO-Komponenten zu benutzen (sofern die bei dieser Version dabei sind). |
Ja, die ADO-Komponente ist dabei und ich hab das jetzt auch mit ADO versucht. Soweit ich das sehe, ist diese Komponente in der Handhabung weitgehend identisch mit der "normalen" TQuery. Frage am Rande: welchen Vorteil bringt mir ADO dabei?
Jedenfalls habe ich auch mit ADO noch das gleiche Problem. Mir scheint, dass ich was grundlegendes vergessen habe! Auf meinem Formular befindet sich also eine TADOQuery. Die Verbindung mit der Datenbank scheint zu funktionieren, "Verbindung testen" gibt mir auf alle Fälle grünes Licht. mein Code für den Zugriff sieht nun wie folgt aus:
Code:
Form1.Query.Active:=false;
Form1.Query.SQL.Clear; Form1.Query.SQL.Add('SELECT Info FROM Table1 WHERE test='+GetWord(sIncome, 'nx', 1)); Form1.Query.Open; Form1.Query.First; sResult:= Form1.Query.FieldList.Values['Info']; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz