MySQL Datensätze einlesen [HILFE]

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Aphadias
Beiträge: 124
Registriert: Mi 28. Okt 2015, 18:28

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von Aphadias »

War ebend auf Klo und Gott hat mir eine Erleuchtung in die Keramik gegeben und es hat klick gemacht nach den Anstoß von TBug (p.s. der Name ist cool :D )

Also erst mal das Ansprechen der Daten... du hast recht... kann sich ja verschieben.

Habe jetzt aus

Code: Alles auswählen

Form3.evorname.Text:=DBGrid1.Columns.Items[3].Field.AsString;

das gemacht

Code: Alles auswählen

Paterfas.enummer.Text:=SQLQuery1.FieldValues['Nummer']; 

(oder ist das immer noch zu ungenau?)

und das mit Form war Faulheit und wollte es später machen. Aber habe es jetzt sofort umgesetzt.

So zum großen Thema speichern. Die Lösung ist erst mal primitiv, weil wollte es ja alles in einem Button haben. Naja wenn ich halt nicht weiß, wie ich den sage ob neu Anlegen oder einfach nur editieren. Dann muss halt irgend wo nen if hin. Da man es aber schlecht in die Datenbank bzw am Ende des speichern hinlegen kann. Also musste ne primitive Lösung her. Ich schiebe die Verantwortung auf den Benutzer erst mal :shock: Ich weiß soll man nicht aber es ist eine Möglichkeit. Also von daher habe ich eingefügt wenn man speichert, eine MessageBox kommt wo man auswählen kann ob Neu Anlegen oder editieren.

Aber wohin soll ich die Zugriffskomponenten auslagern? auf eine extra Form oder wie meinst du das TBug?

TBug
Beiträge: 177
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von TBug »

Aphadias hat geschrieben:bleiben wir bitte jetzt beim thema? ich wäre euch sehr dankbar ;)

Ich bin beim Thema und möchte ja auch gerne helfen.

Aber ich weiß beim besten Willen nicht, wo ich da ansetzen soll.

Leider geht es hier ja nicht um ein Problem, für das man eine Lösung sucht.
Hier geht es eher darum, Dir von 0 an beizubringen, wie man eine Anwendung mit Datenbankanbindung programmiert und welche Komponenten wie funktionieren.

Am besten Du schaust Dir erst einmal die Beispiele an, welche Lazarus selbst mitbringt und unter dem Unterordner "examples" zu finden sind.
Diese Beispiele wäre für Dich sehr interessant:

Lazarus/examples/address_book und alles unter Lazarus/examples/database

Aber vorher solltest Du etwas trockenes verinnerlichen und Dich unbedingt hier einarbeiten, damit Du überhaupt ein Verständnis dafür entwickelst:

http://wiki.lazarus.freepascal.org/Laza ... e_Overview
http://wiki.lazarus.freepascal.org/SqlDBHowto
http://wiki.lazarus.freepascal.org/SQLd ... _Reference
http://wiki.lazarus.freepascal.org/SQLdb_Tutorial0
http://wiki.lazarus.freepascal.org/SQLdb_Tutorial1
http://wiki.lazarus.freepascal.org/SQLdb_Tutorial2
http://wiki.lazarus.freepascal.org/SQLdb_Tutorial3
http://wiki.lazarus.freepascal.org/SQLdb_Tutorial4
http://wiki.lazarus.freepascal.org/Work ... _TSQLQuery

Wenn Du diese Tutorials durchgearbeitet und verstanden hast und dann ein Problem auftaucht, dann sind wir gerne und jederzeit wieder für Dich da um Dir zu helfen.

Also leg ersteinmal hiermit los, denn Stoff, welchen Du verinnerlichen mußt, hast Du nun genug.


.

TBug
Beiträge: 177
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von TBug »

Aphadias hat geschrieben:

Code: Alles auswählen

Paterfas.enummer.Text:=SQLQuery1.FieldValues['Nummer']; 


So ist es richtig.

Ich persönlich hätte jetzt zwar folgendes genommen:

Code: Alles auswählen

Paterfas.enummer.Text:=SQLQuery1.FieldByName('Nummer').AsString; 


Aber die ganze Prozedure kannst Du Dir eben sparen, wenn Du mit den datensensitiven Komponenten arbeitest, denn dort wird dann immer automatisch der Wert aus dem aktuellen Datensatz angezeigt. Also statt ein TEdit eben ein TDBEdit nehmen.

Aphadias hat geschrieben:Aber wohin soll ich die Zugriffskomponenten auslagern? auf eine extra Form oder wie meinst du das TBug?

In ein Datenmodul (TDataModule).

Jetzt erzähle mir bloß nicht, dann Du nicht einmal die elementaren Komponenten der Anwendungsentwicklung kennst.

Neue Forms hast Du ja schon erstellt und das DatenModul findest Du gleich darunter.


.

Aphadias
Beiträge: 124
Registriert: Mi 28. Okt 2015, 18:28

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von Aphadias »

die datamodul kenne ich... probiere es gleich mal aus...

mit dem TDBEdit hatte ich es auch mal versucht... aber bei irgend was hatte er immer rumgemeckert und wollte deswegen nicht verbinden...

den rest schaue ich mir auch gleich an.

TBug
Beiträge: 177
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von TBug »

Aphadias hat geschrieben:mit dem TDBEdit hatte ich es auch mal versucht... aber bei irgend was hatte er immer rumgemeckert und wollte deswegen nicht verbinden...

Was für eine aussagekräftige Beschreibung eines Fehlers.

Sorry, aber wie zum Henker soll man da helfen können?
Ist es wirklich so schwer die Fehlermeldungen, welche einem ausgegeben werden hier wortgenau zu posten?


.

Aphadias
Beiträge: 124
Registriert: Mi 28. Okt 2015, 18:28

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von Aphadias »

ohh tschuldigung.... hatte es ganz am Anfang mal probiert und dachte es wäre jetzt nicht mehr von bedeutung ;)

ich habe noch mal schnell eins eingebaut. DataSource ist klar kann ich auswählen. Aber darüber wenn ich in DataField rein klicke kommt die Fehlermeldung: Unable to retrieve fields definition from dataset

auch in den Examples kommt der Fehler vor wenn man rein klickt.
also muss man ja irgend wo theoretisch noch ein Häckchen setzen bzw eine Zuweisung machen damit das DBEdit auf den Feldnamen zugreifen kann. Danach habe ich halt nicht mehr gekuckt weil es ja anders aus mit dem auslesen ging.

und wenn ich in DataField trotzdem einfach mein Feldnamen eingebe dann wirft er Memo raus. Bedeutet für mich 1. Entweder er hat was und kann es nicht richtig ausgeben oder 2. Er greift irgend wo hin zu wo nix ist und gibt Memo als "Fehler" aus

TBug
Beiträge: 177
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von TBug »

Aphadias hat geschrieben:ich habe noch mal schnell eins eingebaut. DataSource ist klar kann ich auswählen. Aber darüber wenn ich in DataField rein klicke kommt die Fehlermeldung: Unable to retrieve fields definition from dataset

auch in den Examples kommt der Fehler vor wenn man rein klickt.
also muss man ja irgend wo theoretisch noch ein Häckchen setzen bzw eine Zuweisung machen damit das DBEdit auf den Feldnamen zugreifen kann.

Wenn die Felder im OI in der Property "DataField " zur Auswahl angezeigt werden sollen, dann muss die Connection und die Query auf Active := true stehen.

Aphadias hat geschrieben:und wenn ich in DataField trotzdem einfach mein Feldnamen eingebe dann wirft er Memo raus. Bedeutet für mich 1. Entweder er hat was und kann es nicht richtig ausgeben oder 2. Er greift irgend wo hin zu wo nix ist und gibt Memo als "Fehler" aus

Das ist logisch, denn du mußt ja auch die Komponente wählen, welche zu Deinem Tabellenfeld-Typ passt.

Du hasst dort bestimmt ein LONGTEXT oder MEDIUMTEXT in der MYSql-Tabelle eingerichtet und benötigst daher im Programm für diesen Datentyp ein TDBMemo.
Ist der Datentyp VARCHAR oder INT dann kannst Du ein TDBEdit nehmen.

Erinnerst Du Dich an das Problem, dass im DBGrid auch nur Memo stand?
Das ist die gleiche Gegebenheit.


.

Aphadias
Beiträge: 124
Registriert: Mi 28. Okt 2015, 18:28

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von Aphadias »

Irgend wie dachte ich mir schon das es in die Richtung wie DBGrid geht. Aber weil ich mir es schon gedacht hatte habe ich es mal auf z.b. Nummer gelegt (ist INT). Dort zeigte er mir jedoch auch Memo an. Deswegen dachte ich es hätte andere beweggründe.

Aber trotz dessen müsste ich ja zu jeden einzelnen Edit wie beim Grid eine Übersetzung schreiben oder?

Antworten