Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi wie nutze ich dbedit und ähnliches bei sql? (https://www.delphipraxis.net/190019-wie-nutze-ich-dbedit-und-aehnliches-bei-sql.html)

BBoy 22. Aug 2016 12:17

Datenbank: sqlite3 • Version: ? • Zugriff über: sqlconnection

wie nutze ich dbedit und ähnliches bei sql?
 
Ich habe eine SQL Datenbank mit zwei Tabellen.
Datensätze hinzufügen, Editieren usw ist alles kein Problem. Bei Auswahl eines Datensatzes fülle ich die edit felder so:
Code:
 
edit2.Text := sqlquery1.FieldByName('name').Asstring;
edit3.Text := sqlquery1.FieldByName('vorname').Asstring;
Da es nur wenige sind, ist das auch ok. Nun möchte ich allerdings ein Grid mit den Daten aus tabelle2 füllen und da wäre diese Art etwas umständlich. Daher dachte ich mir ein DBGrid zu verwenden.

Auf meinem Formular habe ich nur eine sqlconnection und ein sqlquery.
Daten füge ich so hinzu:
Code:
FSQLCommandText := 'INSERT INTO customers (Name,vorname,wohnort) VALUES ('+name+','+vorname+', '+wohnort+');';
SQLConnection1.ExecuteDirect(FSQLCommandText);
Bestimmte Datensätze finde ich so:
Code:
SQLBefehl:='SELECT * FROM customers WHERE id = '+id+';';
SQLQuery1.SQL.Text := SQLBefehl;
SQLQuery1.Active := true;
Kann mir bitte jemand erklären was ich tun muss um ein dbgrid verwenden zu können?
Danke.

Neutral General 22. Aug 2016 12:21

AW: wie nutze ich dbedit und ähnliches bei sql?
 
Du brauchst eine Datasource (kannst du auch aufs Formular ziehen). Der Datasource weißt du dann deine Query zu und dem DBGrid weißt du die Datasource zu

Also

DBGrid.Datasource = Datasource;
Datasource.Dataset = Query;

Mit allen anderen DB-Komponenten funktionierts genaus.
Du brauchst auch nur 1 Datasource die du dann allen DB-Komponenten zuweisen kannst.

BBoy 22. Aug 2016 13:01

AW: wie nutze ich dbedit und ähnliches bei sql?
 
Dann kommt die Fehlermeldung "Die Operation ist bei einer unidirektionalen Datenmenge nicht gestattet"
Edit:// Also wenn ich versuche der Datasource das Query zuzuweisen.
Verwendet habe ich Tsqlquery und Tsqlconnection.

p80286 22. Aug 2016 13:29

AW: wie nutze ich dbedit und ähnliches bei sql?
 
Dann versuch es mal mit einem
Delphi-Quellcode:
ReadOnly:=True
bei Deinem Grid.

Gruß
K-H

P.S.
Könnte mir jemand die Fragestellung aus der Überschrift erklären?

BBoy 22. Aug 2016 13:38

AW: wie nutze ich dbedit und ähnliches bei sql?
 
Habe mich falsch ausgedrückt.

Die Fehlermeldung "Die Operation ist bei einer unidirektionalen Datenmenge nicht gestattet" kommt wenn ich versuche der Datasource die Eigenschaft DataSet dem query zuzuweisen. Habe die Tdatasource auf das Formular gezogen und nehme dort die Einstellungen vor.

Sherlock 22. Aug 2016 13:46

AW: wie nutze ich dbedit und ähnliches bei sql?
 
Liefert denn die Query eine beschreibbare Datenmenge zurück? Bei Oracle zB muss man die RowID mit selektieren.

Sherlock

BBoy 22. Aug 2016 14:03

AW: wie nutze ich dbedit und ähnliches bei sql?
 
Ich habe die Tsqlquery schon auf meinem Formular.
Soweit funktioniert mein Programm auch.

Nun habe ich eine Tdatasource auf das Formular gezogen. Sobald ich die Eigenschaft DataSet auf SqlQuery1 stelle, kommt die Fehlermeldung. Es geht also nicht.

Ich kann aber von der SqlQuery die Eigenschaft DataSource auf DataSet stellen. Aber das bringt mir anscheinend nichts.

Wie gesagt, ziel ist es dbedit, dbgrid usw zu nutzen.
Abgesehen davon ist meine Datenbank voll funktionsfähig.

Olli73 22. Aug 2016 14:14

AW: wie nutze ich dbedit und ähnliches bei sql?
 
Zitat:

Zitat von BBoy (Beitrag 1345398)
Dann kommt die Fehlermeldung "Die Operation ist bei einer unidirektionalen Datenmenge nicht gestattet"

Du hast eine unidirektionale Datenmenge (query), benötigts aber eine bidirektionale. Das kann man i.d.R. bei der query einstellen.


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