Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Einfache Datenabfrage (https://www.delphipraxis.net/199408-einfache-datenabfrage.html)

DelTurbo 21. Jan 2019 15:52

Datenbank: FIREBIRD • Version: 2.5 • Zugriff über: dbExpress

Einfache Datenabfrage
 
Hi,
ich versuche nun schon eine weile einen Datensatz aus einer FB-Datenbank zu lesen. Ich glaube allerdings das ich von MySql zu verwöhnt bin. Folgender Code meint immer das das Feld CUSTNO nicht existiert. Ich hoffe mit kann jemand sagen was ich falsch mache.

Ich mache die Connection über folgendes: https://sites.google.com/site/dbxfirebird/home
Das Connecten klappt auch wunder bar. Ich schaffe es halt nur nicht einen Datensatz zu lesen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Connection :TSQLConnection;
  Query      :TSQLQuery;
begin
  Connection := TSQLConnection.Create(Self);
  Connection.DriverName := 'FirebirdConnection';
  Connection.LibraryName := 'dbx4fb.dll';
  Connection.VendorLib := 'fbclient.dll';
  Connection.GetDriverFunc := 'getSQLDriverFIREBIRD';
  Connection.Params.Clear;
  Connection.Params.Add('User_Name=SYSDBA');
  Connection.Params.Add('Password=masterkey');
  Connection.Params.Add('Database=localhost:e:\DB\DB1.FDB');
  Connection.Open;

  Query:=TSQLQuery.Create(Self);
  Query.SQLConnection:=Connection;
  Query.SQL.Text:='select * from BAS_CUSTOMERS where CUSTNO=10025;';
  Query.ExecSQl;
  Label1.Caption:=Query.FieldByName('CUSTNO').AsString; //Hier kommt die aussagen das es das Feld nicht gibt.

end;
Vielen Dank im Voraus

Delphi.Narium 21. Jan 2019 15:58

AW: Einfache Datenabfrage
 
Abfragen öffnet man mit Open.

ExecSQL dient nicht für Abfragen, sondern für Insert, Update, Delete ...

Und das hat nichts mit MySQL und verwöhnt und Firebird nicht so verwöhnt oder so zu tuen, sondern was mit dem Unterschied zwischen DML, DDL, DCL (http://www.datenbanken-verstehen.de/...dcl-kommandos/)

DelTurbo 21. Jan 2019 16:19

AW: Einfache Datenabfrage
 
Hi,
erstmal danke für die Info´s. Ich habe nun das ExecSql gegen Open getauscht. Leider kommt dann folgender Fehler.

Code:
Erste Gelegenheit für Exception bei $7727C54F. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 10038454 in Modul 'fbclient.dll'. Lesen von Adresse 00000000'. Prozess Project1.exe (2420)
Mach ich grundsätzlich etwas falsch? Ich habe den ganzen tag gesucht und habe im Grunde nichts gefunden was mit weiter helfen würde. Das einzige was ich geschafft habe ich die Connection.

Edit: Vielleicht gibt es ein Beispiel? Das wäre Toll.

ConnorMcLeod 21. Jan 2019 16:31

AW: Einfache Datenabfrage
 
...

Delphi.Narium 21. Jan 2019 16:39

AW: Einfache Datenabfrage
 
Und wie soll man jetzt ohne Quelltext erraten, was da der Fehlergrund sein könnte?

Komplettes Projekt zippen und anhängen!

Oder hier den kompletten Quelltext zwischen Delphitags einfügen!

Wie ist das eigentlich, wenn man lokale Variabeln in 'ner Prozedur, 'nem ButtonClickEreignis ... deklariert, wie lange sind die dann gültig, wie lange kann dann darauf zugegriffen werden? Wenn man dann dafür Speicher reserviert und den nicht in der Prozedure wieder freigibt, entstehen dann keine Speicherlecks?

Beispiel? Suchmaschine? Tutorial? Delphi? Datenbank? 1. Treffer?

DelTurbo 21. Jan 2019 16:43

AW: Einfache Datenabfrage
 
Öhm, nun weiß ich nicht was du meinst. Der Quelltext steht doch oben. Dort ist nur ExecSql durch Open geändert. Wie ich geschrieben habe. Die eigentliche Datenbank kann ich nicht veröffentlichen.

Oder was meinst du???

DelTurbo 21. Jan 2019 16:45

AW: Einfache Datenabfrage
 
Zitat:

Zitat von ConnorMcLeod (Beitrag 1423733)
...

Sorry, das verstehe ich nicht. Habe ich was "dummes" oder falsches geschrieben???

Delphi.Narium 21. Jan 2019 17:17

AW: Einfache Datenabfrage
 
Zitat:

Zitat von DelTurbo (Beitrag 1423736)
Öhm, nun weiß ich nicht was du meinst. Der Quelltext steht doch oben. Dort ist nur ExecSql durch Open geändert. Wie ich geschrieben habe. Die eigentliche Datenbank kann ich nicht veröffentlichen.

Oder was meinst du???

Dein Projekt besteht garantiert aus mehr, als dem ButtonClickEreignis.

Datenbank: Testdatenbank mit Nonsensdaten?

... von ConnorMcLeod heißt: Hat mit 'ner Antwort angefangen, diese aber nach dem Abschicken wieder verworfen. Betrachte seine ... einfach als nichtexistent ;-)

Benutze selbst halt "nur" die ZeosLib. Da steht bei Database dann "nur" der Dateiname, ohne das localhost: davor.

Aus Deiner Fehlermeldung ist nicht zu entnehmen, wo genau sie auftritt, welche Zeile des Quelltextes. Passiert der Fehler innerhalb der obigen Routine oder außerhalb?

Prinzipiell dürfte gelten: Bei einer Zugriffsverletzung wird auf etwas zugegriffen, das beim Zugriff nicht (mehr) existiert.

DelTurbo 21. Jan 2019 17:37

AW: Einfache Datenabfrage
 
Liste der Anhänge anzeigen (Anzahl: 1)
Leider ohne DB.

ConnorMcLeod 21. Jan 2019 17:39

AW: Einfache Datenabfrage
 
Zitat:

Zitat von DelTurbo (Beitrag 1423738)
Zitat:

Zitat von ConnorMcLeod (Beitrag 1423733)
...

Sorry, das verstehe ich nicht. Habe ich was "dummes" oder falsches geschrieben???

;-) Nein, das war ich und habe es gelöscht, bevor es jemand lesen kann ;-)

Delphi.Narium 21. Jan 2019 18:01

AW: Einfache Datenabfrage
 
Da ich über eine andere Delphiversion als Du verfüge, gelingt es mir nicht, den Fehler irgendwie nachzustellen.

Bitte nimm die Connection und die Query aus dem ButtonEreignis heraus und erstelle sie als Komponenten auf dem Formular (und nicht erst zur Laufzeit).

Dann befülle die Attribute im Objektinspektor und stelle sowohl die Verbindung zur Datenbank her, als auch zur Abfrage (also das Attribut Connected der TSQLConnection im Objektinspektor auf True und das Attribut Active der TSQLQuery auf True setzen).

Wenn das dann gelingt, kannst Du in der DFM des Projektes nachsehen, welche Attribute der beiden Komponenten wie gesetzt sind und das dann im Quelltext nachstellen.

Für mich ist allerdings fraglich, warum die beiden Komponenten als lokale Variabeln im Buttonereignis erstellt werden und dort dann weder die Abfrage geschlossen wird, noch die Verbindung wieder getrennt wird und auch keine Freigabe der Variabeln erfolgt.

Das Argument: Das ist nur zum Testen, lasse ich nicht gelten. Auch beim Testen sollte man den Quelltext korrekt und vollständig erstellen, da ansonsten ungeahnte Seiteneffekte nicht auszuschließen sind.

DelTurbo 22. Jan 2019 15:35

AW: Einfache Datenabfrage
 
Ich habe das Gefühl das es an dbx4fb.dll liegt. Nehme ich Devart dbExpress driver for InterBase and Firebird klappt es.
Und ja, es wäre noch alles geschlossen worden wenn es lief. Aber es ging ja nur um die Frage ob jemand weiß warum er beim Query abschmiert. Das hätte er auch bei einem Close und Free gemacht. Es ist eigentlich in dieser Situation sinnfrei die Zeilen darunter zu machen.

Gruß

Edit: Um das Thema abzuschließen, mit https://github.com/madorin/fibplus klappt es.

hoika 22. Jan 2019 15:49

AW: Einfache Datenabfrage
 
Hallo,
Zitat:

Leider kommt dann folgender Fehler.
Der Fehler Kommt genau beim Query.Open?

DelTurbo 22. Jan 2019 16:06

AW: Einfache Datenabfrage
 
Zitat:

Zitat von hoika (Beitrag 1423888)
Hallo,
Zitat:

Leider kommt dann folgender Fehler.
Der Fehler Kommt genau beim Query.Open?

Jop...

Edit: Durch das FIBPlus blicke ich im Moment noch nicht 100% durch. Vielleicht finde ich ja dazu nochwas.

hoika 22. Jan 2019 16:41

AW: Einfache Datenabfrage
 
Hallo,
wenn es nicht ein Bug der Zugriffskomponenten beim Zugriff auf FB3 ist (FB3 ist ja relativ neu),
gibt es vielleicht einen Versionskonflikt der Client-DLLs.

Suche mal nach allen fbclient.dll und gds32.dll (am besten über Search Everything)
und vergleiche die Versioninfos.
FB3 legt die gds32.dll als direkte Kopie der fbclient.dll nur auf Wunsch bei der Installation an.
Vielleicht hast du eine veraltete gds32.dll/ fbclient.dll.

DelTurbo 23. Jan 2019 09:01

AW: Einfache Datenabfrage
 
Hi,
erstmal danke für deine mühe. Aber ich MUSS 2.5 nutzen. Steht auch oben das es um 2.5 geht. ich habe gestern abend noch ein bissl getestet und gesucht. Ich habe im moment ein Query laufen. Über TIBDatabase.

Falls ich noch probleme haben sollte werde ich einfach nochmal nachfragen.

Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:27 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