Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Speicherung in MySql (https://www.delphipraxis.net/186774-speicherung-mysql.html)

Bernhard Nienhaus 28. Sep 2015 15:49

Datenbank: MySql • Version: 5.5 • Zugriff über: Delphi XE 7

Speicherung in MySql
 
Ich komme und komme nicht weiter. Muss aber auch sagen das ich noch nicht so lange in Delphi programmiere. Habe bisher dBase verwendet.
Dort auch schon ein grösseres Projekt programmiert. Von Beruf bin ich Feuerwehrmann und habe dort für einige Feuerwehren die komplette Personalverwaltung programmiert. Aber da nun viele von DOS Programmen abrücken, wollte ich das Programm in Delphi jetzt programmieren. Da ich noch nicht lange in Delphi programmiere ist es sehr mühsam, aber die Beispiele die Sie in Ihren Tutorials bringen, sind klasse, die bringen mich sehr weit nach Vorn.
Aber nun habe ich ein Problem wo ich nicht so recht weiter komme.
Erst mal mit welchen Geräten bzw. Programmen ich arbeite:


Computer : Rechner mit I5 Proz
System : Win7 prof
Delphi : XE 7 prof.
Datenbanksytsem : MySQL
Datenbank : Feuerwehr (MySQL)
Tabelle : Leh (MySQL


Zum Problem:
Ich muss ja neue Daten eingeben und abspeichern, sowie will ich aus einem DBgrid Daten übernehmen um sie dann abzuspeichern. Also einmal neue Daten einfügen , zum weiteren dann Daten ersetzen.
Das Anstossen der Möglichkeiten geschieht über verschiedene Button.



procedure TPer_form.LEH_spei_bitbtnClick(Sender: TObject);
begin
leh_tabl.insert ;
leh_tabl['lg_dat'] := LG_dat_aen_picker.Date;
LEH_tabl['LG_pnr'] := per_table['PE_nr'];
LEH_tabl['LG_kurz'] := LG_kurz_edit.Text;
LEH_tabl['LG_lang'] := LG_lang_edit.Text;
LEH_tabl['LG_ort'] := LG_ort_edit.Text;
LEH_tabl['LG_inst'] := LG_inst_combo.Text;
LEH_tabl['LG_std'] := LG_std_edit.Text;
LEH_tabl['LG_Leit'] := LG_leiter_edit.Text;
LEH_tabl['LG_note'] := LG_note_combox.Text;
LEH_tabl['LG_wert'] := MLG_wert;
leh_tabl['LG_usda'] := now ;
LEH_tabl['LG_user'] := an_table1['US_name'];
leh_tabl.Post ;
MessageDlg('Die Daten wurden gespeichert.....', mtInformation, [mbOK], 0);
end;


Dies funktioniert auch, so wie gewünscht. Könnte mir aber vorstellen das es in SQL sauberer wäre. Vielleicht können sie mir diese Procedur zu kommen lassen.
Das eigentliche Problem habe ich aber damit das im Änderungsmodus immer der erste Datensatz geändert wird. Auch hier nachfolgend die Procedur.

procedure TPer_form.LEH_aen_speich_bitbtnClick(Sender: TObject);
begin
leh_tabl.edit ;
LEH_tabl['Lg_dat'] := LG_dat_aen_picker.Date;
LEH_tabl['LG_pnr'] := per_table['PE_nr'];
LEH_tabl['LG_kurz'] := LG_kurz_edit_a.Text;
LEH_tabl['LG_lang'] := LG_lang_edit_a.Text;
LEH_tabl['LG_ort'] := LG_ort_edit_a.Text;
LEH_tabl['LG_inst'] := LG_inst_edit_a.Text;
LEH_tabl['LG_std'] := LG_std_edit_a.Text;
LEH_tabl['LG_Leit'] := LG_leiter_edit_a.Text;
LEH_tabl['LG_note'] := LG_note_edit_a.Text;
leh_tabl['LG_usda'] := now ;
LEH_tabl['LG_user'] := an_table1['US_name'];
leh_tabl.Post ;
end;

Das ist die zweite Procedur, die immer den ersten Datensatz ändert.
Auch hier würde ich gerne eine SQL Speicherung vorziehen mit Update

Nur wie ?????

Im Vorraus meinen herzlichen Dank

jobo 28. Sep 2015 19:37

AW: Speicherung in MySql
 
Also um mal den Anfang zu machen, Du entwickelst ja offenbar die Anwendung von Grund auf neu:
- Gibt es ein Grund, dass Du mySQL nimmst? Vorschlag: PostgreSQL oder Firebird (Bei PostgreSQL weiß ich allerdings nicht, welche Treiber da verfügbar sind.
- Hast Du die Tabellen 1:1 übernommen? Ich würde mir den "Luxus " gönnen und wengstens die Feldnamen und die Tabellennamen so benennen, dass es vielleicht auch mal jemand anders lesen und verstehen kann. (Jetzt wäre auch der Zeitpunkt, das Datenmodel anzupassen, falls notwendig)
- TTable usw. : Auch hier empfehle ich sprechende Namen. Zu dem konkreten Problem: Dir ist vielleicht nicht klar, wie Du in einem Dataset navigierst und wie man datensensitive Komponenten nutzt. Hier gibt es mindestens einige Tutorials zu dem Thema (s.u.). Ein Datenbank Einsteiger Tutorial bringt Dich sicher einen großen Schritt weiter (egal ob mySQL oder was anderes).
- Zu Queries: Du musst nicht zwingend SQL schreiben, da gibt es unterschiedliche Konzepte. Du kannst aber so arbeiten, dass Du im Zweifel (Spezialfälle) mit expliziten Insert, Update, Delete Statements arbeiten kannst. (s.u.)


http://www.delphipraxis.net/dp_searc...rums_string=36

Pfaffe 28. Sep 2015 20:29

AW: Speicherung in MySql
 
http://www.sql-und-xml.de/sql-tutori...er-zeilen.html

Alternative:
http://www.feuerwehrsoftware.biz/

Dejan Vu 29. Sep 2015 06:32

AW: Speicherung in MySql
 
Bit kei abk neh. Das kan man doc kau les.

Delphi-Quellcode:
procedure TPersonenForm.LEH_Speichern_Btn_Click(Sender: TObject);
begin
 leh.insert;
 ...
 leh_tabl.Post ;
 MessageDlg('Die Daten wurden gespeichert.....', mtInformation, [mbOK], 0);
end;
Verwende doch aussagekräftige Bezeichner. Abkürzung sind weder professionell, noch machen sie das Programm schneller. Sie sind einfach nur unleserlich.

Wie schon ausgeführt: Gleich richtige Namen für Tabellen und Felder nehmen.
Dann würde ich das ganze Tabellenzeugs in ein Datenmodul packen. Das hat in einem Formular nichts zu suchen.

Jumpy 29. Sep 2015 14:26

AW: Speicherung in MySql
 
Zitat:

Zitat von Bernhard Nienhaus (Beitrag 1317130)
Das eigentliche Problem habe ich aber damit das im Änderungsmodus immer der erste Datensatz geändert wird.

Zu der konkreten Frage. Man muss zuerst einmal zu dem Datensatz navigieren, den man ändern will, sonst öffnet man mit
Delphi-Quellcode:
leh_tabl.edit
immer nur den gerade aktiven (ersten) Datensatz.

Und weil's noch keiner gesagt hat: Quellcode-Abschnitte am besten in die Delphi-Tags (Der Helm-Button im Editor) packen, damit sie schön formatiert und lesbar sind.

Perlsau 29. Sep 2015 17:48

AW: Speicherung in MySql
 
:wiejetzt: Fehlposting :drunken:

Bernhard Nienhaus 30. Sep 2015 13:14

AW: Speicherung in MySql
 
Recht herzlichen Dank für die Hinweise. Mit den Variablen Abkürzungen, ja das kommt noch aus der dBase Programmierung, da man dort ja keine langen Variablen Namen verwenden konnte. Die werde ich auch in dem Projekt dann entsprechend ändern in "Sprechende Variablen".
Zu dem Änderungsmodus habe ich vor dem leh_tabl.edit dann die LehrangsIDnr gesucht, sodass der ausgesuchte Datensatz dann verwendet wird.

procedure TPer_form.Lehrgang_aendern_bitbtnClick(Sender: TObject);
begin
..Lehrgang_TFDtabel.Locate('Lehrgang_idnr',Lehrgan g_idnr,[loCaseInsensitive]);
..Lehrgang_TFDTabel.edit ;
..Lehrgang_TFDTabel['Lehrgang_datum'] := Lehrgang_Datum_DateTimePicker.Date ;
.....
.....
Lehrgang_TFDTable.post
end;


Mit dieser Ausführung klappt alles so wie gewünscht.

Vielen herzlichen Dank für eure Hinweise und Tip.s

mfg Bernhard

PS Die b eiden Punkte stehen für Leerzeichen, damit zwischen Begin und End ein Abschnitt ist bzw. eine Einrückung hier.

Sir Rufo 30. Sep 2015 13:46

AW: Speicherung in MySql
 
Zitat:

Zitat von Bernhard Nienhaus (Beitrag 1317322)
PS Die b eiden Punkte stehen für Leerzeichen, damit zwischen Begin und End ein Abschnitt ist bzw. eine Einrückung hier.

Ja, das ist ja schön ... aber ...
Zitat:

Zitat von Jumpy (Beitrag 1317223)
Und weil's noch keiner gesagt hat: Quellcode-Abschnitte am besten in die Delphi-Tags (Der Helm-Button im Editor) packen, damit sie schön formatiert und lesbar sind.

... denn dann kannst du dir diese Punkte sparen ...
Delphi-Quellcode:
procedure TPer_form.Lehrgang_aendern_bitbtnClick(Sender: TObject);
begin
  Lehrgang_TFDtabel.Locate('Lehrgang_idnr',Lehrgan g_idnr,[loCaseInsensitive]);
  Lehrgang_TFDTabel.edit ;
  Lehrgang_TFDTabel['Lehrgang_datum'] := Lehrgang_Datum_DateTimePicker.Date ;
  ...
  Lehrgang_TFDTable.post
end;
Und so muss das im Beitrags-Editor aussehen:
Code:
[DELPHI]
procedure TPer_form.Lehrgang_aendern_bitbtnClick(Sender: TObject);
begin
  Lehrgang_TFDtabel.Locate('Lehrgang_idnr',Lehrgan g_idnr,[loCaseInsensitive]);
  Lehrgang_TFDTabel.edit ;
  Lehrgang_TFDTabel['Lehrgang_datum'] := Lehrgang_Datum_DateTimePicker.Date ;
  ...
  Lehrgang_TFDTable.post
end;
[/DELPHI]


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