![]() |
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 |
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.) ![]() |
AW: Speicherung in MySql
|
AW: Speicherung in MySql
Bit kei abk neh. Das kan man doc kau les.
Delphi-Quellcode:
Verwende doch aussagekräftige Bezeichner. Abkürzung sind weder professionell, noch machen sie das Programm schneller. Sie sind einfach nur unleserlich.
procedure TPersonenForm.LEH_Speichern_Btn_Click(Sender: TObject);
begin leh.insert; ... leh_tabl.Post ; MessageDlg('Die Daten wurden gespeichert.....', mtInformation, [mbOK], 0); end; 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. |
AW: Speicherung in MySql
Zitat:
Delphi-Quellcode:
immer nur den gerade aktiven (ersten) Datensatz.
leh_tabl.edit
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. |
AW: Speicherung in MySql
:wiejetzt: Fehlposting :drunken:
|
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. |
AW: Speicherung in MySql
Zitat:
Zitat:
Delphi-Quellcode:
Und so muss das im Beitrags-Editor aussehen:
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;
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 10:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz