MySQL Datensätze einlesen [HILFE]

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
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:Moin,

ich habe ein Problem festgestellt. Jeder Datensatz soll ja einmalig sein. Wenn ich jetzt ein öffne und dann wieder speichere... dann legt er ja den immer neu an. Der soll aber den alten Text überschreiben.

Aktuell speichere ich mit dem Code:

[code=laz]Form2.SQLQuery1.Append;


Hast Du einmal F1 gedrückt und nachgelesen, was die Funktion Append der Query-komponente macht?

Wenn nicht, dann solltest Du dies einmal dringend nachholen, denn dort stehen bestimmt noch andere Funktionen mit denen man den aktuellen Datensatz EDITieren kann.


.

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

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von Aphadias »

@Aliobaba UPDATE ist mir klar... nur ich möchte gerne bei meinem quelltext bleiben so wie er ist

@af0815 ich probiere es mal so... hatte nicht das append am anfang in betracht gezogen sondern den restlichen quelltext... ich probiere da nachher mal was

@Tbug danke für den Tipp F1... problem nur warum auch immer geht nicht bei mir ^^... aber ich habe mal unter Hilfe-> CHM-Hilfe gekuckt und denke mir mal du meintest das. Ich habe mal bei Append reingeschaut... theoretisch muss ich ja nur aus Append ein AppendContent machen (so wie ich es mit meinem Englisch verstanden habe). Also bei Append macht er einfach was neues auf. Aber wenn der Befehl AppendContent ganz am Anfang steht müsste ich den ja trotzdem erst mal sagen ob es die eine Zeile schon gibt oder sucht er sich die im Nachhinein dann selbst?

merke gerade Appendcontent baut auf einen event auf also geht das nicht... edit macht er nicht obwohl der datensatz ausgewählt ist... ich überlege mal weiter

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:edit macht er nicht obwohl der datensatz ausgewählt ist... ich überlege mal weiter


Was macht er mit Edit nicht?

zum Anhängen eines Datensatzes Verwendest Du:

Code: Alles auswählen

Form2.SQLQuery1.Append;

und zu Editieren eben:

Code: Alles auswählen

Form2.SQLQuery1.Edit;


Zitat aus der Hilfe:
Edit will set the dataset in edit mode: the contents of the current record can then be changed. This action will call the TDataset.BeforeEdit and TDataset.AfterEdit events.

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 »

Noch etwas wollte ich anmerken:

Warum benutzt Du eigentlich keine datensensitive Komponenten zum Anzeigen und Ändern der Datensätze?

Dann könnest Du Dir nämlich auch das sparen:

Code: Alles auswählen

 
Form2.SQLQuery1.FieldValues['Nummer']:=enummer.text;
Form2.SQLQuery1.FieldValues['ZAB']:=ezab.text;
Form2.SQLQuery1.FieldValues['Name']:=ename.text;
Form2.SQLQuery1.FieldValues['Vorname']:=evorname.text;
Form2.SQLQuery1.FieldValues['Geb-Datum']:=egeb.text;
 



.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von af0815 »

TBug hat geschrieben:Warum benutzt Du eigentlich keine datensensitive Komponenten zum Anzeigen und Ändern der Datensätze?

Er hat wahrscheinlich die TDatasource noch nicht entdeckt. :shock: SCNR
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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 »

af0815 hat geschrieben:Er hat wahrscheinlich die TDatasource noch nicht entdeckt. :shock: SCNR


Doch, doch, das hat er schon entdeckt, denn er nutzt ja auch ein DBGrid und kein StringGrid. :wink:


.

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

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von Aphadias »

Also ich kam die Tage noch nicht zum Basteln. Aber wenn ich append nehme und edit... dann macht er trotzdem nur ein neuen Anhang auf und editiert es nicht. Wenn ich nur edit nehme dann meckert er rum das nix ausgewählt ist obwohl ich es vorher habe. Da ich gerade auch löschen programmiere ist mir noch was anderes in Sinn gekommen bzw wie hier erwähnt Datasource. Zum öffnen rufe ich ja die Daten auf die ich im DBGrid markiert habe und hole somit die Daten ausm Datasource. Wenn ich dort Daten lösche oder ändere.... wird das dann auch automatisch im MySQL umgesetzt?

Und was ist eine Datensensitive? :oops:

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:Und was ist eine Datensensitive? :oops:


Es gibt ja zahlreiche Eingabe-Komponenten wie zum Beispiel

TEdit, TMemo, TDateTimPicker, TListBox, TCheckBox usw..

Entsprechend geibt es für Datenbakprogrammierung die Komponenten mit Gleicher Fumktion, welche aber zusätzlich noch die Properties DataSource und DataField beinhalten.

Also:
TDBEdit, TDBMemo, TDBDateTimPicker, TDBListBox, TDBCheckBox usw..

Bei entsprechender Verknüpfung im OI werden dann automatisch die Daten des ausgewählten Datensatzes angezeigt.


Zum Rest:
Packe einmal Dein komplettes Projekt in eine Zip und lade diese hoch.
Ich glaube hier liegt ein gewaltiges Verständnisproblem zur Benutzung der Komponenten vor.


.

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

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von Aphadias »

ich habe mal am anfang gefragt ob es einen unterschied gibt zwischen edit und dbedit :D und jetzt wenn du es so erwähnst macht es ein bisschen klick...

kann ich es dir auch per pn schicken? will nicht unbedingt das die ganze welt es sieht ;)

jetzt noch mal die frage... wenn ich die sql in datasource geladen wird... und man dort etwas löscht oder editiert... wird es dann auf sql übertragen?


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 »

Ach Du heilige Marie!

Meine Befürchtung ist beim Sichten des Quellcodes noch um den Faktor 1000 übertroffen worden.

1. Du solltest den einzelnen Forms und allen Komponenten aussagekräftige Namen vergeben und nicht Form1, Form2, Button1, Label5 usw..

2. Lagere die Zugriffskomponenten wie die Connection, Query, Datasource und Transaction in ein Datenmodul aus.

3. Bitte, Bitte, versuche die Datenbank-Technik zu verstehen.

Dein Ansprechpartner um an Daten zu kommen ist nicht das Grid, sondern die Query, also nicht so wie in Deinem Quellcode:

Code: Alles auswählen

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

Wenn Du schon Felder direkt ansprechen möchtest, dann nicht über den Index, sondern über den Feldnamen, denn der Feld-Index kann sich verschieben, wenn Du zum Beipiel in der Tabelle ein neues Feld anlegst.

Wie gesagt, schon gar nicht im Grid, denn die Zellen des Grids lassen sich auch verschieben.

4. Du solltest Deine Datenbankstruktur überdenken!

Ist es wirklich sinnvoll ALLES in eine einzige Tabelle zu schreiben, was passiert zum Beispiel, wenn der Patient mehr Medikamente benötigt als Felder vorgesehen sind?



Nun zur Lösung:

Alles auf Anfang und wir nehmen Stift und Papier zur Hand.
1. Welche Daten müssen in die Datenbank?
2. Wie sollte die optimale Datenbankstruktur aussehen.
3. Welche Eingabe- und/oder Ausgabefenster sind notwendig.
4. Wie sollen die einzelen Daten dargestellt werden, also mit welchen Komponenten.
und und und...


.

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

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von Aphadias »

uufffff.... :cry:

Ich habe gehofft es ist nicht ganz so schlimm...

also 1. In die Datenbank wäre noch eine weitere Tabelle gekommen weil das schwierigste wäre zum Schluss gekommen. Es kommen ja noch eingescannte Arztbriefe rein und die können unendlich viele sein. Sonst Medikamente reichen 5. weil die Patienten die mehr als 5 brauchen werden nicht bei uns bleiben in der Unterkunft. Deswegen hatte ich es mit in die Tabelle genommen.
Mit rein müssen: Nummer, ZAB-Nummer, Name, Vorname, Geb.-Datum, Sprache, Geschlecht, Befundung(Muss viel Text beinhalten), Cave(Muss einzelne Wörter enthalten), Diagnose(auch einzelne Wörter), Medikamentenplan eine Tabelle mit Medi-Name, Früh, Mittag, Abend, Nacht, Dauer, Wer es verordnet hat, wie lange, Bemerkungen
Und ein Feld wo Dateien eingelesen und angezeigt werden können. Ach genau und Wiedervorstellung, Zahnarzt und Facharzt muss noch mit rein. Weil es später in eine andere Liste geladen werden sollte wo man alle Termine im Überblick hat.

2. Wie besprochen... hatte auch Überlegt Medikamente aus zu Lagern. Aber da es eh nie mehr werden hatte ich jede Spalte mit rein genommen. Sonst halt für jedes Feld eine Spalte halt.

3. Naja eigentlich alles was du siehst ;)

4. Darstellung... also die ersten Angaben jeweils im EditFeld... sonst über den Rest kann man sich bestimmt streiten. Manches hätten auch Listboxen sein können

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von hde »

Aphadias hat geschrieben:Ich habe gehofft es ist nicht ganz so schlimm...


Deinen Fragen in den verschiedenen Threads konnte man schon entnehmen, dass du nicht den geringsten Schimmer hast von dem was du tust bzw. zu tun wäre. Google mal, ich denke es gibt OpenSource die das kann was du zusammenbasteln willst .. und die funktioniert !

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

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von Aphadias »

Danke wie ihr mut macht. Ich habe halt 5 Jahre nicht mehr programmiert...

Und es wird nicht irgend ein OpenSource-Programm. Weil die sind zu professionell und meins soll ganz stumpf bleiben damit auch Leute ohne medizinischer Ausbildung es bedienen können.

Ich habe es jetzt angefangen und werde es auch durchziehen....

ich will das es erst mal nur funktioniert... danach verbessere ich es...

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

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: MySQL Datensätze einlesen [HILFE]

Beitrag von Aliobaba »

Hallo,

ich kenne die Probleme sehr sehr gut, wenn man sich in diese Materie einarbeiten muss. :( 8)

Aber vielleicht solltest Du wirklich mit kleineren Datenbank-Projekten anfangen. Bei dem, was du vor hast, brauchst du mehrere verschiedene Tabellen, die du dann geschickt (und das ist wirklich schwierig!) miteinander verbinden must (Relationen!)
Bitte nicht böse sein: Aber wenn du bereits beim Update eines Datensatz mit dem Problem kämpfst, dass ein neuer Datenstz angelegt wird statt nur ein bereits vorhandener Datensatz geändert wird, dann solltest du wirklich erst mal kleinere (Test-)Projekte programmieren.

Berufsbedingt kenne ich das Arztprogramm "TurboMed". Da gibt es eine Demo-Version, die - soweit ich weiß - nur darin beschränkt ist, dass man keine Abrechnung mit den Krankenkassen machen kann. Dieses Demo-Programm kann alles, was du gerne haben möchtest: http://www.turbomed.de/

Viele Grüße
Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Antworten