MySQL Einträge ändern

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
pjensen
Beiträge: 77
Registriert: Fr 27. Jul 2007, 08:43
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Nahe Flensburg

Beitrag von pjensen »

Frage:
Kennst Du das KDE-Adressbook?
Daran könnte ich Dir viel erklären, was ich meine.

Desing der DB:
Das mache ich in Kürze mal, dürfte kein großes Problem sein.
Wichtig: nur eine Tabelle, damit es nicht so kompliziert wird.

Zur Funktion:
Nicht an OpenOffice übergeben, sondern selbst ausdrucken. Einfach nur z.B. 5 verschiedene Standart-Ausrducke mit 5 Buttons im Programm.

z.B.:
Kunde XY aus der Liste auswählen.
Bei Kunde XY ein paar Daten ändern [z.B. Preis].
(in der Liste oder wahlweise in einer Maske)
Auf Button-1 klicken und schon wird das Anschreiben-1 ausgedruckt.

Button1=Angebot
------------------------------------
Adresskopf,

Sehr geehrte Damen und Herren,

wir freuen uns, Ihnen unser tolles Produkt anbieten zu können.
Es kosten [MySQL-Clients, Spalte=Preis].

Mit freundlichen Grüßen...
------------------------------------


Button2=InfoBrief
------------------------------------
Adresskopf [aus MySQL]

Sehr geehrte Damen und Herren,

da Sie unser Tolles Produkt gekauft haben, wollen wir Sie jetzt darüber informieren, daß wir auch noch ganz andere tolle Sachen machen können wie z.B. unsere super tolle Dienstleistungen. Weiteres können Sie im beigefügten Prospekt und der Preisliste lesen.

Mit freundlichen Grüßen...
--------------------


Das Erstellen/der Ausdruck dieser Texte in Pascal zu programmieren wird nach MySQL sicherlich auch eine große Aufgabe werden. Aber das kommt später...Wichtig: erstmal will ich überhaupt mit mysql umgehen können.

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:

Beitrag von af0815 »

Die SQLQuery sollte eigentlich selbst in der Lage sein, ein einfaches Insert/Update/Delete Statement zu erzeugen. Das geht aus dem Code (was du schon gefunden hast) hervor. Die Komponenten selbst sind eigenlich nirgendwo richtig dokumentiert.

Mal sehen was sich da machen lässt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Beitrag von ralli »

@af0815, hast Du Mysql, Aapache und Php von der Susi DVD installiert oder als lampp im Ordner /opt/lampp ?

Ich weiss nicht, in welchen Ordner ich den symbolischen Link erstellen muss, weil er ja die mysqlclient.so nicht findet und wie der aussehen muss. Hilf einem alten Mann mal aufs Pferd.

Ich habe jetzt firebird als Superserver laufen und entsprechende Kompos unter flib und uib unter Lazarus installiert, da aber mysql die Datenbank des Web ist, würde ich den Zugriff mit Lazarus auch mal testen.

ralli

pjensen
Beiträge: 77
Registriert: Fr 27. Jul 2007, 08:43
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Nahe Flensburg

Beitrag von pjensen »

@ralli

Ich habe 2 PC mit OpenSuse 10.2
Saturn (192.168.19.94, nur Server) : U.a. Apache, mysql, php mit yast installiert. Zudem Webmin als rpm mit rpm -Uvh installiert. Damit den Apachen konfiguriert. Ausserdem ein phpmyadmin.

Jupiter (192l.168.10.93, Arbeitsstation): Hier läuft Lazarus. Zuerst hatte ich auch die Fehlermeldung "mysqlclient.so nicht gefunden" .
Lösung: Mit yast (software installieren...) nach mysqlclient.so gesucht (hierbei provides angeklickt).
Ergebnis: mysql-devel + mysql-shared. Beide installiert, jetzt läuft es.

Für den Fall, daß Dein Yast die nicht findet, hier meine Installionsquellen

Viel Erfolg beim Installieren :D

pjensen
Beiträge: 77
Registriert: Fr 27. Jul 2007, 08:43
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Nahe Flensburg

Beitrag von pjensen »

@af815

Es muß doch möglich sein, ein Grid richtig up-zu-daten...

Soweit ich weiß gibt es hierfür in der Tat weder Dokus im Netz noch Fachlektüre. Da bleibt also nur der Code von mysqdb & Co. Das wird sehr aufwendig...

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Beitrag von ralli »

@pjensen, danke für Deine schnelle Hilfe,habe webadmin installiert, supergut

Also ich habe ausserhalb meiner lampp Installation nun noch einmal mysql mit Bordmitteln von susi installiert. Erst apache2 mit php und mysql. Dann mysql. Mysql läuft erfolgreich. Dann zum Testen mit phpMyAdmin erfolgreich eine Datenbank adressen angelegt mit einer Tabelle telefon. Dann habe ich mit Lazarus ein neues Projekt begonnen, ein Formular mit den üblichen Verdächtigen:

MySQL50Connection - heisst bei mir Datenbank
SQLQuery - heisst bei mir Abfrage
SQLTransaction1
Datasource1
DBGrid1

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
if Datenbank.Connected then
begin
Abfrage.Close;
Abfrage.SQL.Clear;
Abfrage.SQL.Add(Edit1.Text);
Abfrage.Open;
end;
end;

Es werden keine Daten angezeigt..
ralli

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Beitrag von ralli »

@monta

Was ist hier eigentlich los ? Wenn ich einen längeren Text eingebe, verweigert mir der Server den Zugriff ! Ist das normal ? Deshalb habe ich den letzten Thread auch schon stark gekürzt.

ralli

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Das hat nichts mit dem text zu tun sondern mit den SQL Statements, die du da sicher reingeschrieben hast. Hatt ich auch schonmal scheint so als versucht der Server die Statements auszuführen die du im text stehn hast und daraufhin kommt das Zugriff verweigert.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Beitrag von ralli »

Das habe ich mir fast schon gedacht.

ralli

pjensen
Beiträge: 77
Registriert: Fr 27. Jul 2007, 08:43
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Nahe Flensburg

Beitrag von pjensen »

@ralli

Schau Dir mal dieses Projekt an. (U.U. mußt Du während des Draufklickens Shift-Taste drücken.)

Damit kann man die Daten im Grid sehen und editieren. Du mußt es nur an Deine Datenbank anpassen (Server, Name Pass etc).

Das Editieren bzw. das Update vom Grid zur Datenbank läuft allerdings noch mächtig schief.... bzw: Wenns bei Dir läuft würde es mich sehr wundern....

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:

Beitrag von af0815 »

@pjensen
Ich kann jetzt einige Fehler nachvollziehen. Das editieren geht ohne Probleme, solange die Daten nicht von der DB übernommen werden sollen.
Bei mir ist die ApplyUpdates die Probleme macht. Scheinbar wird beim automatischen Erzeugen der Updateanweisung ein Fehler gemacht und der Code ist für den SQL-Sever nicht brauchbar. Mal den Teil aus der Komponete extrahieren und im Debugger genauer ansehen.

Momentan kämpfe ich mit dem Debuggen unter Linux etwas. Ich bin halt etwas verwöhnt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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:

Beitrag von af0815 »

@ralli
Probiers am Anfang mit einem 'SEL-ECT * FR-OM tabelle' unter SQL.
Wenn du im Designer dann Active auf true setzt solltest du die Daten im Grid bereits sehen (Ohne kompilieren und Starten)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

pjensen
Beiträge: 77
Registriert: Fr 27. Jul 2007, 08:43
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Nahe Flensburg

Beitrag von pjensen »

@af0815:

Nur dass ich das richtig verstehe:
1- Bei Dir läuft jetzt lazarus und mysql50?
2- Du läßt das Prog von mir oder ein ähliches laufen und hast den gleichen Fehler beim updaten des Grids?
3- Wenn ja, dann: Wie macht sich der Fehler bei Dir bemerkbar ? Werden bei Dir auch -wie bei mir- in vielen Fällen sämtliche Einträge einer Spalte auf den einen im Grid geänderten Wert verändert?

@ralli: Übrigens: Auf meinem Suse10.3-mysql-server (der saturn heißt) sind in /var/lib/mysql/saturn.log die querys zu sehen.

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:

Beitrag von af0815 »

Jetzt läuft es. Es gehört zu den ältesten Problemen bei Datenbanken

A) Verwende nie einen Bezeichner als Spaltennamen.
B) Nimm 'ApplyUpdates' um die Änderungen zu speichern
C) Schließe eine Transaktion mit 'commit' ab.

zu A)
Ersetze den Namen 'index' mit 'clientidx' in der Datenbank. Weiters verwende als UpdateMode 'upWhereKeyOnly'. Die UpdateSQL, DeleteSQL und InsertSQL können leer bleiben. Aber entweder Leer oder mit sinnvollen SQL.

Ich verwende immer ein Namensschema um bei grossen DB's den Überblick zu behalten, dadurch habe ich mit solchen Problemen weniger zu kämpfen.

zu B) + C)

Code: Alles auswählen

procedure ButtonApply%u28Sender%u3a TObject%u29;
begin
  SQLQuery1.ApplyUpdates;
  SQLTransaction1.Commit;
end;
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

pjensen
Beiträge: 77
Registriert: Fr 27. Jul 2007, 08:43
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Nahe Flensburg

Beitrag von pjensen »

Bei Dir läuft es jetzt???

1) "Index" in der DB in "ClientIDX" umbenannt.
2) Das ganze nochmal schnell komplett neu erstellt, um eventuellen Fehleinträgen im Obejtinspektror etc. aus dem Weg zu gehen.

Bei mir tut sich folgendes:

Bei upWhereKeyOnly => Fehlermeldung
Bei upWhereAll => Fehlermeldung
Bei upWhereChanged => läuft, aber immer noch das gleiche Probelm

Hier die Datenbank
Hier das mysql-Logfile
Hier der Code der Unit
Hier die fehlermeldung bei UpWhereAll
Hier die Fehlermeldung bei UpWhereKeyOnly
Hier nochmal das ganze neue Projekt


Zum Logfile:
- Die ########## kommen natürlich von mir.
- Bei UpWhereKeyOnly steht hinter dem "Where" gar nichts, ....Das ist doch falsch oder?
- Bei UpWhereAll steht ganz am Ende eine 0 im Eintrag bei City,...Das ist doch wohl auch falsch oder?

Im Übrigen steht da öfters "show index from clients". Deswegen niemals eine Spalte "Index" nennen, richtig?

Mit upWhereAll, upWhereChanges, upWhereKeyonly hatte ich kürzlich schon mal rumgespielt, allerdings mit dem gleichen Ergebnis.

Warum läuft es bei Dir und bei mir nicht. ??? Es muß doch daran liegen, dass hier falsche Anfragen vom Programm beim MySQL-Server ankommen oder? Also nicht das bei meinem MySQL-Server irgendwas nicht stimmt...

Welche Version von lazarus hast Du eigentlich ?? (Meine = 0.9.22 Beta)

Könntest Du mir bitte mal das Logfile von mysql bzw. die entsprechenden Ausschnitte von Dir zeigen?

Folgendes gibt mir aber schwer zu denken: WiKI-MySQL-Lazarus
Hier steht nämlich bei TSQLQuery, dass man beser exec statt open nehmen sollte. Das sieht für mich wichtig aus, obgleich ich es nicht verstehe. Sagt Dir das was?

Tausche ich im Quellcode das SQLQuery1.Open durch SQLQuery1.ExecSQL aus, sthen im Grid keien Daten mehr drin.
--------------------
// SQLQuery1.Open;
SQLQuery1.ExecSQL;
--------------------


Hier das Logfile mit Open / Exec

Da fehlt doch bei Exec die Abfrage oder ??

In der Hoffnung auf Hilfe...

Peter

Antworten