MySQL und die Components

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

MySQL und die Components

Beitrag von MacWomble »

Guten Morgen,

als Umsteiger von VB verstehe ich die Zusammenhänge zwischen den einzelnen DB-Komponenten nicht ganz, d.h. irgendwo habe ich etwas in meinem Programm vergessen:

was ich habe:
- eine MySQL-Datenbank
- ein Formular mit DBGrid und DBNavigator
- ein Datenmodul mit MySQLConnection, SQLTransaction, SQLQuery und Datasource

Die Navigation und Anzeige der Daten funktioniert im Prinzip. Wenn ich einen neuen Datensatz einfüge, wird er auch im Grid dargestellt, ebenso wenn ich einen Datensatz editiere.
Beende ich nun die Anwendung und starte diese neu, sind alle Änderungen wieder weg.
Bin ich von VB zu verwöhnt und erwarte zu viel vom DBNavigator?
Irgend etwas scheine ich zu übersehen ...

Problem 2 sind deutsche Umlaute, welche in der DB drin stehen, aber nicht gezeigt werden (UTF-8 general-ci) - beim Editieren kann ich Umlaute aber eingeben und sehe diese auch.

Ich freue mich, wenn mir jemand hier auf die Sprünge helfen kann.

Gruß Klaus
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: MySQL und die Components

Beitrag von marcov »

Hört sich an als ein typischer Anfängerfehler: Ich denke den Transaktion wirt nie geschlossen. Sehe mal ob du "commit" anrufen kannst auf den Transaktion on-exit. (formclose oder so etwas)

Alfred
Beiträge: 101
Registriert: Do 22. Nov 2007, 20:06
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: München

Re: MySQL und die Components

Beitrag von Alfred »

Hallo Klaus,

Du hast in der Tabelle einen Primarykey?

Gruß
Alfred

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: MySQL und die Components

Beitrag von MacWomble »

Wie bereits erwähnt denke ich aauch, dass es ein dummer Anfängerfehler ist. Es ist nur ein kleines Testprogramm, mit welchem ich experimentiere.
Ich habe bereits einiges versucht, komme aber nicht weiter.
Muss ich die Transaktion per Code starten und beenden oder ist dies Aufgabe des DBNNavigators?
Hier mal die Daten:

Code: Alles auswählen

unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  DbCtrls, db, mysql50conn, sqldb, DBGrids;
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    DBEdit1: TDBEdit;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormShow(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
uses unit2;
 
{ TForm1 }
 
 
 
procedure TForm1.FormShow(Sender: TObject);
begin
  DataModule1.MySQL50Connection1.Connected:=true;
  DataModule1.SQLQuery1.Active:=true;
end;
 
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  DataModule1.SQLTransaction1.Commit;
end;
 
 
initialization
  {$I unit1.lrs}
 
end.


Code: Alles auswählen

unit Unit2; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Dialogs,
  mysql50conn, db, sqldb;
 
type
 
  { TDataModule1 }
 
  TDataModule1 = class(TDataModule)
    Datasource1: TDatasource;
    MySQL50Connection1: TMySQL50Connection;
    SQLQuery1: TSQLQuery;
    SQLTransaction1: TSQLTransaction;
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  DataModule1: TDataModule1;
 
implementation
 
initialization
  {$I unit2.lrs}
 
end.


Code: Alles auswählen

object DataModule1: TDataModule1
  Height = 300
  HorizontalOffset = 2706
  VerticalOffset = 679
  Width = 400
  object MySQL50Connection1: TMySQL50Connection
    Connected = True
    DatabaseName = 'trale'
    Params.Strings = (
      ''
    )
    Password = '***'
    Transaction = SQLTransaction1
    UserName = 'irgendwer'
    HostName = 'localhost'
    left = 36
    top = 36
  end
  object SQLTransaction1: TSQLTransaction
    Database = MySQL50Connection1
    left = 76
    top = 76
  end
  object SQLQuery1: TSQLQuery
    IndexName = 'DEFAULT_ORDER'
    Database = MySQL50Connection1
    Transaction = SQLTransaction1
    SQL.Strings = (
      'select name,strasse,hausnr,plz,ort from adressbasis'
    )
    Params = <>
    UpdateMode = upWhereChanged
    left = 36
    top = 76
  end
  object Datasource1: TDatasource
    DataSet = SQLQuery1
    left = 128
    top = 76
  end
end
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: MySQL und die Components

Beitrag von MacWomble »

Nachtrag: Ich habe einen Primärschlüssel auf einem Feld lfdnr, welches aber in der Abfrage nicht verwendet wird.

Gruß Klaus
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Alfred
Beiträge: 101
Registriert: Do 22. Nov 2007, 20:06
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: München

Re: MySQL und die Components

Beitrag von Alfred »

Hallo Klaus,

vor commit steht bei mir

SQLQuery1.UpdateMode := upWhereChanged;
SQLQuery1.ApplyUpdates;

Gruß
Alfred

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: MySQL und die Components

Beitrag von MacWomble »

Hallo Alfred!

Das ApplyUpdates muss es sein, jedenfalls funktioniert es nun.

Jetzt muss ich mich nur noch den deutschen Umlauten widmen, was nicht so einfach sein wird :-(
(Ich habe ca. 250 000 Datensätze in der Datenbank, die nur in Lazarus nicht richtig angezeigt werden)

Vielen Dank
Klaus
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: MySQL und die Components

Beitrag von MacWomble »

Wenn ich in der Lazarus-Anwendung München eingebe, habe ich in der Datenbank München stehen.
In Lazarus wird es aber richtig angezeigt.

Die Datenbank selbst sollte nach Möglichkeit nicht geändert werden müssen!

Wo muss in Lazarus der Zeichensatz eingestellt werden, damit das richtig funktioniert (MySQL ist UTF-8_general-ci)

Gruß
Klaus
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Alfred
Beiträge: 101
Registriert: Do 22. Nov 2007, 20:06
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: München

Re: MySQL und die Components

Beitrag von Alfred »

Hallo Klaus,

Lazarus arbeitet nur mit UTF8. Ich setzt deshalb Lazarus bei mir nicht produktiv ein.

Wenn nur Lazarus zugreift, kommt man mit

Charset: cp 1252 West European

und

collation latin1_german2_ci

klar.

Gruß
Alfred

piper62
Beiträge: 131
Registriert: Sa 5. Apr 2008, 17:57
OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
CPU-Target: 32Bit/64Bit
Wohnort: Ulm

Re: MySQL und die Components

Beitrag von piper62 »

Das stimmt so nicht. Datenbankanwendungen die mit Lazarus erstellt werden können sehr wohl mit anderen Codepages zurechtkommen.
Das kann also kein Grund sein Lazarus nicht produktiv anzuwenden.

Im Zusammenhang mit dem Codepage Problem gab es im Forum schon mehrere Beiträge.
Ev. mal hier reinschauen:
viewtopic.php?f=17&t=2477&start=0

Sonst kann ich empfehlen, gerade für den produktiven Einsatz, die Zeos-Komponenten zu benutzen.
Wir machen sehr viel damit -auch produktiven Betrieb im größeren Maßstab im Klinikumfeld- und sind äußerst zufrieden.

Gruss

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: MySQL und die Components

Beitrag von MacWomble »

Was heißt, Lazarus arbeitet nur mit UTF8?
Ich habe in der Datenbank doch auch UTF8 eingestellt - (schon wieder so eine unbedarfte Frage eines Umsteigers ;-) )

An ZEOS habe ich auch schon gedacht, bekomme aber leider beim installieren die Meldung:

Das Package "zplain 7.0" konnte nicht kompiliert werden

Ich habe ZEOS gestern herunter geladen und FPC/Lazarus mit dem Skript getlazarus installiert (Ubuntu Intrepid Ibex)

Etwas Hintergrund zu mir:
Ich habe seit Jahren Software unter Windows entwickelt und dabei das MS-Paket verwendet. Hauptsächlich VisualBasic, da C zu Dokumentationsintensiv ist.
Des weiteren habe ich einig Programme im 3D-Bereich (Grafikeditoren etc) mit Delphi geschrieben.
Ich bin also nicht ganz unbedarft, was die Programmierung angeht, jedoch tue ich mich nun etwas schwer, mit Lazarus/FPC zurecht zu kommen.

Ich möchte dieses Gespann jedoch verwenden, da ich mich von Windows weitestgehend getrennt habe und nach über 14-monatigem Kennenlernen von Linux
sicher nicht wieder zu Windows zurück möchte.

Gruß Klaus
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Alfred
Beiträge: 101
Registriert: Do 22. Nov 2007, 20:06
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: München

Re: MySQL und die Components

Beitrag von Alfred »

Hallo Klaus,

meine Erfahrungen beruhen auf Client Windows XP Pro, Samba-Server Linux(FC8).

Was heißt, Lazarus arbeitet nur mit UTF8?


Egal was ich an der Datenbank eingestellt hatte, Lazarus hatte mir UTF8 in die Datenbank gestellt.

Bei Client Linux bin ich abgestürzt und habe es nicht weiter verfolgt, da meine beruflichen Programme
alle nur in der Windowswelt funktionieren.

Dein Problem könnte aus dem Bereich des von der Linuxdistribution verwendeten Zeichensatzes stammen.

Gruß
Alfred

piper62
Beiträge: 131
Registriert: Sa 5. Apr 2008, 17:57
OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
CPU-Target: 32Bit/64Bit
Wohnort: Ulm

Re: MySQL und die Components

Beitrag von piper62 »

Die Lazarusumgebung hat zwar als primäre Kodierung UTF8, was ja im Grund auch der einzig sinnvolle Weg ist.
Im Übrigen wechselt ja sogar die MS-Win Welt in diese Richtung...

Die DB-Verbindung hat damit aber nicht zwangsläufig etwas zu tun, hier kommt es einmal auf die Einstellungen in der DB an. Also was dort für die Tabellen oder zum Teil bei manchen DBs auch für einzelne Felder als Kodierung vorgegeben ist.
Die andere Seite ist die des Clients und somit des Anwendungsprogrammes und hier ist die Konfiguration des Clients wichtig.
NUR wenn beide Seiten die gleiche Kodierung benutzen kann es ohne Darstellungsprobleme funktionieren.
Für die Client-Konfiguration kann man bei Nutzung der Zeos Komponenten dann bei der ZConnection in den Properties dann wie in dem Beispiel im Thread (s.o.) das Codepage Setting beeinflussen.

Zur Installation/Nutzung der Zeos Komponenten: Nimm' die aktuelle Stable Release. Das ist die 6.6.4 ! Grundsätzlich empfehle ich bei Nutzung auch für kommerzielle Projekte eher konservativ mit den Versionen zu sein.
Neue Versionen testen wir mit unserem Team immer erst ausgiebig bevor wir sie in die produktive Entwicklungsumgebung übernehmen.
Derzeit arbeiten wir mit FPC 2.2.2 und Lazarus 0.9.26.1 allerdings haben wir die Entwicklungsumgebung unter MS-Win, Linux und Mac-OS verfügbar.
Das geht in dieser Güte nur mit sehr wenigen Systemen!
Wir können unseren Kunden somit Systeme unter diesen drei Betriebssystemen zur Verfügung stellen.
Wobei die Meisten sich inzwischen für ein Linux-System entscheiden.

Die Installation von Zeos sollte dann direkt unter dem Package Management von Lazarus erfolgen, dazu gibt es aber genügend Dokumentation.

Falls weitere Fragen sein sollten, einfach schreiben.

Gruss,
Piper

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: MySQL und die Components

Beitrag von MacWomble »

Hallo Piper,

ich habe es nun mit de 6.6.4 versucht, mit dem selben Resultat:

Das Package "zplain 6.6.3" konnte nicht kompiliert werden.
Aus der Installationsliste nehmen?

Ich habe die selben Versionsnummern bei Lazarus und FPC wie von dir genannt.

Irgend eine Idee?

Was mich verwirrt: Es wird die Version 6.6.3 angezeigt, obwohl ich eben das Paket 6.6.4 heruntergeladen und entpackt habe.

Gruß Klaus
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Re: MySQL und die Components

Beitrag von knight »

MacWomble hat geschrieben:Hallo Piper,

ich habe es nun mit de 6.6.4 versucht, mit dem selben Resultat:

Das Package "zplain 6.6.3" konnte nicht kompiliert werden.
Aus der Installationsliste nehmen?

Gruß Klaus


Wie hast du denn versucht, Zeos zu installieren? Bei Zeos sind 5 .lpk Dateien vorhanden, von denen nur eine (zcomponent) installiert werden sollte. Die anderen folgen als Abhängigkeiten automatisch mit.

knight

Antworten