Memo & MySQL - Speichern - Auslesen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Memo & MySQL - Speichern - Auslesen

Beitrag von Bernie110 »

Hallo Zusammen, ein frohes und gesundes neues Jahr wünsche ich euch.

Ich möchte den Inhalt meines Memofeldes in meine DB (MySQl) spreichern + auslesen.
Funktioniert so wie ich es gemacht habe auch.
Allerdings bekomme ich Warnings :
Bild

Ich habe es so versucht :

Die Memo Einstellungen der DB
STELLE_AUFGABEN_MEMO Longtext,
STELLE_PROFIL_MEMO Longtext,
STELLE_WIR_BIETEN_MEMO Longtext,

Mit diesem Code speichere ich die Daten

Code: Alles auswählen

             if INFO_SAVE.Text = 'NEW' then
               begin
                   // STAMM_STELLEN ANLEGEN-----------------------------------------STAMM_STELLEN ANLEGEN
                   SQL_String_Insert := 'INSERT INTO STAMM_STELLEN '
                                      + '('
                                      + ' STELLEN_NAME,'
                                      + ' STELLE_STATUS_ID,'
                                      + ' STELLE_LAND,'
                                      + ' STELLE_NL_ID,'
                                      + ' STELLE_ABTEILUNG_ID,'
                                      + ' STELLE_BEREICH_ID,'
                                      + ' STELLE_KOSTENSTELLE,'
                                      + ' STELLE_AUFGABEN_MEMO,'
                                      + ' STELLE_PROFIL_MEMO,'
                                      + ' STELLE_WIR_BIETEN_MEMO,'
                                      + ' STELLE_SPRACHE,'
                                      + ' STELLE_Angelegt_Von,'
                                      + ' STELLE_Angelegt_Am'
                                      + ') '
                                      + ' VALUES '                                         //STAMM_STELLEN ANLEGEN
                                      + '('
                                      + ' :STELLEN_NAME,'
                                      + ' :STELLE_STATUS_ID,'
                                      + ' :STELLE_LAND,'
                                      + ' :STELLE_NL_ID,'
                                      + ' :STELLE_ABTEILUNG_ID,'
                                      + ' :STELLE_BEREICH_ID,'
                                      + ' :STELLE_KOSTENSTELLE,'
                                      + ' :STELLE_AUFGABEN_MEMO,'
                                      + ' :STELLE_PROFIL_MEMO,'
                                      + ' :STELLE_WIR_BIETEN_MEMO,'
                                      + ' :STELLE_SPRACHE,'
                                      + ' :STELLE_Angelegt_Von,'
                                      + ' :STELLE_Angelegt_Am'
                                      + ');';

 frm_A_MAIN_HAUPTMENU.SQLQuery2.close;
 frm_A_MAIN_HAUPTMENU.SQLQuery2.SQL.Clear;
 frm_A_MAIN_HAUPTMENU.SQLQuery2.SQL.Add(SQL_String_Insert);               

frm_A_MAIN_HAUPTMENU.SQLQuery2.ParamByName('STELLEN_NAME').AsString          := STELLEN_NAME.Text;
frm_A_MAIN_HAUPTMENU.SQLQuery2.ParamByName('STELLE_STATUS_ID').AsInteger     := 99;
frm_A_MAIN_HAUPTMENU.SQLQuery2.ParamByName('STELLE_LAND').AsString           := STELLE_LAND.Text;
frm_A_MAIN_HAUPTMENU.SQLQuery2.ParamByName('STELLE_NL_ID').AsString          := STELLE_NL_ID.Text;
frm_A_MAIN_HAUPTMENU.SQLQuery2.ParamByName('STELLE_ABTEILUNG_ID').AsString   := STELLE_ABTEILUNG_ID.Text;
frm_A_MAIN_HAUPTMENU.SQLQuery2.ParamByName('STELLE_BEREICH_ID').AsString     := STELLE_BEREICH_ID.Text;
frm_A_MAIN_HAUPTMENU.SQLQuery2.ParamByName('STELLE_KOSTENSTELLE').AsString   := STELLE_KOSTENSTELLE.Text;
frm_A_MAIN_HAUPTMENU.SQLQuery2.ParamByName('STELLE_AUFGABEN_MEMO').AsMemo    := STELLE_AUFGABEN_MEMO.Lines.Text;
frm_A_MAIN_HAUPTMENU.SQLQuery2.ParamByName('STELLE_PROFIL_MEMO').AsMemo      := STELLE_PROFIL_MEMO.Lines.Text;
frm_A_MAIN_HAUPTMENU.SQLQuery2.ParamByName('STELLE_WIR_BIETEN_MEMO').AsMemo  := STELLE_WIR_BIETEN_MEMO.Lines.Text;
frm_A_MAIN_HAUPTMENU.SQLQuery2.ParamByName('STELLE_SPRACHE').AsString        := STELLE_SPRACHE.Text;
frm_A_MAIN_HAUPTMENU.SQLQuery2.ParamByName('STELLE_Angelegt_Von').AsString   := frm_A_MAIN_HAUPTMENU.lbl_UsernName.Caption;
frm_A_MAIN_HAUPTMENU.SQLQuery2.ParamByName('STELLE_Angelegt_Am').AsDateTime  := Now();
frm_A_MAIN_HAUPTMENU.SQLQuery2.ExecSQL;
  frm_A_MAIN_HAUPTMENU.SQLTransaction2.Commit; 

Und lese die Daten mit diesem Code wieder aus :

Code: Alles auswählen

procedure TFrm_STAMM_STELLEN_ERFASSUNG.STELLEN_IDChange(Sender: TObject);
var
  SQL_String_Insert : String;
begin

  // DATEN EINLESEN


      if STELLEN_ID.text <> '' then
        begin
           STELLE_AUFGABEN_MEMO.clear;
           STELLE_AUFGABEN_MEMO.clear;
           STELLE_WIR_BIETEN_MEMO.clear;


           SQL_String_Insert := 'Select * from STAMM_STELLEN WHERE STELLEN_ID = '''+STELLEN_ID.text+''' ';

           frm_A_MAIN_HAUPTMENU.SQLQuery1.close;
           frm_A_MAIN_HAUPTMENU.SQLQuery1.SQL.Clear;
           frm_A_MAIN_HAUPTMENU.SQLQuery1.SQL.Add(SQL_String_Insert);
           frm_A_MAIN_HAUPTMENU.SQLQuery1.open;
           STELLEN_NAME.text               :=  frm_A_MAIN_HAUPTMENU.SQLQuery1.FieldByName('STELLEN_NAME').asString;
           STELLE_BEREICH_ID.text          :=  frm_A_MAIN_HAUPTMENU.SQLQuery1.FieldByName('STELLE_BEREICH_ID').asString;
           STELLE_ABTEILUNG_ID.text        :=  frm_A_MAIN_HAUPTMENU.SQLQuery1.FieldByName('STELLE_ABTEILUNG_ID').asString;
           STELLE_LAND.text                :=  frm_A_MAIN_HAUPTMENU.SQLQuery1.FieldByName('STELLE_LAND').asString;
           STELLE_NL_ID.text               :=  frm_A_MAIN_HAUPTMENU.SQLQuery1.FieldByName('STELLE_NL_ID').asString;
           STELLE_KOSTENSTELLE.text        :=  frm_A_MAIN_HAUPTMENU.SQLQuery1.FieldByName('STELLE_KOSTENSTELLE').asString;
           STELLE_AUFGABEN_MEMO.Lines.Append(frm_A_MAIN_HAUPTMENU.SQLQuery1.FieldByName('STELLE_AUFGABEN_MEMO').AsWideString);
           STELLE_PROFIL_MEMO.Lines.Append(frm_A_MAIN_HAUPTMENU.SQLQuery1.FieldByName('STELLE_PROFIL_MEMO').AsWideString);
           STELLE_WIR_BIETEN_MEMO.Lines.Append(frm_A_MAIN_HAUPTMENU.SQLQuery1.FieldByName('STELLE_WIR_BIETEN_MEMO').AsWideString);
    end;
end; 
Funktioniert wie gesagt. Aber kann man das so machen ?
Die Warnings machen mir ein bisschen Sorgen.
Habs auch mit Blob versucht aber nicht hinbekommen.
Wie könnte man es besser machen ?
Hatte bisher noch kein Memofeld benutzt.... und ich hab schon über 200 Formulare :shock:

Zudem eine weitere Frage :
Wie kann man in einem Memofeld prüfen, ob die maximale Anzahl der Stellen erreicht ist ?



Bin für jede Hilfe dankbar.
Vorab herzlichen Dank für eure Antworten
Lg Bernie

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: Memo & MySQL - Speichern - Auslesen

Beitrag von Bernie110 »

Jemand einen Vorschlag ? Lg Bernie

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Memo & MySQL - Speichern - Auslesen

Beitrag von theo »

Ist nicht ganz mein Gebiet, aber wie kommst du denn überhaupt auf die Idee, das ganze "AsMemo" oder "AsWideString" anzusprechen?
Warum nicht immer "AsString"?

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Memo & MySQL - Speichern - Auslesen

Beitrag von charlytango »

ich hab da eine ketzerische Frage.....

Die abgefragten Daten sollen offensichtlich in Controls (eingabefähig oder halt readonly) angezeigt werden.

Hat es einen bestimmten Grund warum du nicht datensensitive Controls nimmst?
Die würden sich um derartige Problemstellungen von Natur aus schon selbst kümmern.

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: Memo & MySQL - Speichern - Auslesen

Beitrag von Bernie110 »

theo hat geschrieben:
Mo 4. Jan 2021, 14:49
Ist nicht ganz mein Gebiet, aber wie kommst du denn überhaupt auf die Idee, das ganze "AsMemo" oder "AsWideString" anzusprechen?
Warum nicht immer "AsString"?
Hm interssant. Jep funktioniert. Danke das wars.
Hatte im Netz gesucht wie das funktioniert und eben das gefunden. AsMemo + Widestring

Lg Bernie

Antworten