Datenbanken mit MSEide+MSEgui

Forum für alles rund um die MSEide und MSEgui
Antworten
KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Datenbanken mit MSEide+MSEgui

Beitrag von KOBOLD Messring GmbH »

Lieber Martin,
gemäss Deinem Ratschlag fange ich hier jetzt ein neues Thema an: Datenbanken mit MSEide+MSEgui.
Ich bin ja noch ein Anfänger, obwohl ich früher in Delphi und jetzt auch schon in Lazarus einige Projekte gemacht habe.
Aber jetzt brauche ich in MSEide HILFE:
Ich habe es nicht geschafft, meine Datenbanken in einem TDBStringGrid zur Anzeige zu bringen.
Ich habe auf der Form: tmsemysql50connection, tmsesqltransaction, tmsesqlquery (mit `select * from testtabelle`, wohl die einfachste Abfrage), tmsedatasource und tdbstringgrid.
Ich kann im Programm auf die Felder zugreifen, auch im DBStringGrid navigieren, aber das DBStringGrid an sich bleibt leer, habe probiert, die Felder hinzuzufügen, wird auch alles akzeptiert ohne Fehler, aber das DBStringGrid bleibt leer.
Ich meine, ich habe alles so gemacht wie Du im Beitrag `Architektur MSEide+MSEgui` vom 1.11. geschrieben hast, aber anscheinend mach ich was grundsätzlich falsch.
¿Kannst Du/Könnt Ihr mir helfen?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Datenbanken mit MSEide+MSEgui

Beitrag von mse »

Das einfachste um alle Felder im tdbstringrid anzuzeigen, ist tdbstringgrid.options dsgo_autofields zu aktivieren.
Um gezielt einzelne Spalten anzulegen setze dsgo_autofields auf false und benutze die tdbstringgrid.datacols Eigenschaft.
Beispiel, es sollen die Felder 'f1','f2,'f3' angezeigt werden:
- Im Object Inspector tdbstringgrid.datacols.count = 3.
- auf '+' bei datacols.count clicken.
- auf '+' bei item 0 clicken.
- 'f1' in datafield auswählen.
- auf '+' bei item 1 clicken.
- 'f2' in datafield auswählen.
- auf '+' bei item 2 clicken.
- 'f3' in datafield auswählen.

Für "ernsthafte" Arbeiten ist tdbwidgetgrid mit eingesetzten tdb*editwidget besser geeignet, da die Konfigurierungsmöglichkeiten viel grösser sind.
Falls du dich nicht um applyupdates und commit kümmern möchtest, aktiviere tmsesqlquery.controller.options dso_autoapply und dso_autocommitret (dies meint auto commit retaining).

Martin

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Datenbanken mit MSEide+MSEgui

Beitrag von KOBOLD Messring GmbH »

¡Vielen Dank! (und wieder hat sich bewährt: Kaum macht man`s richtig, schon funktionierts)
Wenn ich mir`s leisten könnte, würde ich einen Kurs bei Dir buchen.
Ich werde noch zum MSEide-Fan...
ABER, um Dich nicht dauernd mit irgendwelchen Basics zu quälen: ¿Gibt's denn nirgendwo ein Tutorial, was ein bisschen über das Beginners-Tutorial herausgeht? (eine Schaltfläche mit einer Beschriftung zu versehen ist 100% Delphi/Lazarus kompatibel)
ABER, z.B. bin ich schon wieder an zwei Sachen gescheitert: Ein normales StringGrid (keine DB). Da gibt es keine Cells,
¿wie greife ich auf die Zellen zu?
Ein TMemoEdit: Da gibt es keine Lines, keine Strings, keine Items, keine Methode Add. ¿Wie füge ich da Einträge zu und lese diese wieder aus?
Danke für Deine Geduld

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Datenbanken mit MSEide+MSEgui

Beitrag von mse »

KOBOLD Messring GmbH hat geschrieben: ABER, um Dich nicht dauernd mit irgendwelchen Basics zu quälen: ¿Gibt's denn nirgendwo ein Tutorial, was ein bisschen über das Beginners-Tutorial herausgeht? (eine Schaltfläche mit einer Beschriftung zu versehen ist 100% Delphi/Lazarus kompatibel)
Es hat sich noch kein MSEgui Anwender dazu bequemt, die Dokumentation systematisch anzupacken und zu konzentrieren. Für die Dokumentation von MSEide+MSEgui existiert ein eigenes SourceForge Projekt:
http://sourceforge.net/projects/msedocumenting/

Im dortigen SVN repository gibts Beispiele und etwas Dokumentation:
http://msedocumenting.svn.sourceforge.n ... mse/trunk/

Eine Fülle von Informationen gibts in der newsgroup (NNTP):
[url]news://news.grid-sky.com/public.mseide-msegui.talk[/url]

Nun müsste "jemand" dafür sorgen, dass die Beitrage von Google indexiert werden...
Und dann gibt es noch ein kleines veraltetes Wiki:
http://wiki.freepascal.org/MSEide_&_MSEgui

und weitere verstreute Informationen.
ABER, z.B. bin ich schon wieder an zwei Sachen gescheitert: Ein normales StringGrid (keine DB). Da gibt es keine Cells,
¿wie greife ich auf die Zellen zu?
Auf die Spalten (Typ tstringdatacol) mit tstringgrid[spalte], auf die Zelltexte mit tstringgrid[spalte][zeile].
Auch hier der Hinweis, für "ernsthafte" Arbeiten ist twidgetgrid mit eingesetzten t*editwidget besser geeigenet, da die Konfigurierungsmöglichkeiten besser sind.
Ein TMemoEdit: Da gibt es keine Lines, keine Strings, keine Items, keine Methode Add. ¿Wie füge ich da Einträge zu und lese diese wieder aus?
Ein tmemoedit sollte nicht als Listenersatz misbraucht werden, tmemoedit (und auch Delphis TMemo) speichern den Text als einfachen string, es gibt keinen schnellen zeilenweisen Zugriff. Bitte benütze tstringgrid für Textlisten.
In der unit msestrings gibt es Routinen um strings in einzelne Zeilen zu teilen (breaklines) und einen string aus einzelnen Zeilen zusammenzusetzen (concatstrings), gib dabei "lineend" als separator an.
Falls du trotzdem mit einem tmemoedit zeilenweise arbeiten möchtest,

Code: Alles auswählen

 
 TheMemoedit.value:= TheMemoedit.value + lineend + 'The text';
 
hängt eine neue Zeile an,

Code: Alles auswählen

 
var
 ar1: msestringarty;
begin
 ar1:= breaklines(TheMemoedit.value);
 
Speichert die Zeilen in ar1. msestringarty ist array of msestring, msestring ist widestring.
Für strings im Zusammenhang mit MSEgui sollte immer der Typ "msestring" verwendet werden.
Die Eigenschaft "value" gibt es in allen edit widgets, auch in tstringedit sollte "value" und nicht "text" verwendet werden.

Edit:
Danke für Deine Geduld
Kein Problem ich habe für Fragen volles Verständnis, MSEide+MSEgui ist wirklich anders.
Martin

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Datenbanken mit MSEide+MSEgui

Beitrag von KOBOLD Messring GmbH »

Vielen Dank Martin für die wertvollen Links,
bin jetzt schon VIEL weiter, aber eine wichtige Sache habe ich leider nicht gefunden:
ShowModal für eine Form gibt es wohl nicht.
Die Option fo_modal bringt nicht den gewünschten Effekt.
¿Was muss ich machen?
In der News-Group habe ich auch nichts gefunden.
Danke für Deine bereitwillige Hilfe...

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Datenbanken mit MSEide+MSEgui

Beitrag von mse »

KOBOLD Messring GmbH hat geschrieben: Die Option fo_modal bringt nicht den gewünschten Effekt.
fo_modal wirkt nur beim instantiieren des Formulars beispielsweise durch application.createform(). Normalerweise wird der parameter bei twidget.show() benutzt, also z.B. TheModalForm.show(true), dadurch können beliebige widgets in einer eigenen event loop modal laufen.

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Datenbanken mit MSEide+MSEgui

Beitrag von KOBOLD Messring GmbH »

Nochmals Danke Martin für die Hilfe, Show(true) funktioniert Modal perfekt.

ABER: Datenbank-Zugriff über ODBC auf MySQL und MS-Access unter Lazarus (TODBCConnection) und MSEide (TmseODBCConnection)
¡¡¡ Ich verzweifle noch !!!
Ich dachte, nun einen Weg gefunden zu haben um auch unter Windows an die MS-Access DB heranzukommen.
Sowohl die TODBCConnection von Lazarus als auch die TmseODBCConnection funktionieren super unter Linux auf MySQL (ich mache keine dollen Sachen, nur SELECT, INSERT und UPDATE von Varchar, Integer und Double-Felder).
Bei Windows über den ODBC kann ich problemlos SELECT-Statement machen (die Anwendung kennt die Felder, brauche keine System-Tables etc.), aber
INSERT und UPDATE führen immer zu Fehler:
Anzahl der Parameter stimmt nicht, obwohl das Statement 100% korrekt ist. ¡¡¡Das gleiche Statement in MS-Access ausgeführt funktioniert!!!
Aber über Lazarus und/oder MSEide immer der Fehler, dass die Anzahl der Parameter falsch ist:
UPDATE baumtabelle SET baumart = "Tanne" WHERE ID = 2;
hat doch alle Parameter, ist ein einziger String, nicht mit TParam gemacht.
Habe auch probiert mit und ohne Semikolon hintendran, aber immer das gleiche.
Das gleiche auch bei z.B.
INSERT INTO baumtabelle VALUES (3,"abc","xyz","bnr","Tanne",0.7,0.3,3,0,100,14,0.16,10,1);
Statement funktioniert perfekt in MS-Access, aber über Lazarus/MSEide-ODBC wird die Anzahl der Parameter angemeckert.
¿¿Was mach ich nur falsch, woran könnte es liegen??
¿¿Sind die ODBC-Komponenten wirklich soooo buggy?? ¿¿Alle beide, die von Lazarus UND MSEide??
¿¿Hat jemand eine Idee??

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Datenbanken mit MSEide+MSEgui

Beitrag von mse »

KOBOLD Messring GmbH hat geschrieben: ¿¿Was mach ich nur falsch, woran könnte es liegen??
¿¿Sind die ODBC-Komponenten wirklich soooo buggy?? ¿¿Alle beide, die von Lazarus UND MSEide??
¿¿Hat jemand eine Idee??
Access via tmseodbcconnection funktioniert bei mir. Kannst du ein MSEgui Projekt (inklusive DB) welches das Problem zeigt posten?

Martin

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Datenbanken mit MSEide+MSEgui

Beitrag von KOBOLD Messring GmbH »

Vielen Dank lieber Martin,
anbei das kleine Testprojektchen mit Access-DB.
Es geht über einen ODBC-DSN namens `baumtest`, der müsste mit `Microsoft Access Treiber (*.mdb)` auf die beigefügte MS-Access-Db `baumtestdb.mdb` verweisen.
Wenn Du da mal nachschauen könntest, wo da der Wurm drin ist. Das merkwürdige ist, dass es unter Linux auf eine MySQL-DB perfekt funktioniert....
Dateianhänge
mseide_odbc.zip
(17.79 KiB) 96-mal heruntergeladen

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Datenbanken mit MSEide+MSEgui

Beitrag von mse »

KOBOLD Messring GmbH hat geschrieben: Wenn Du da mal nachschauen könntest, wo da der Wurm drin ist. Das merkwürdige ist, dass es unter Linux auf eine MySQL-DB perfekt funktioniert....

Code: Alles auswählen

tmsesqlquery2.SQL.Add ('UPDATE baumtabelle SET Baumart = '''+
                     tstringedit1.value+''' WHERE ID = '+id);
 
Double quotes funktionieren in Windows scheinbar nicht. Dies ist übrigens eine sehr umständliche Art der Datenbankprogrammierung. Falls du für ID ein autoinc, generator oder sequence Feld verwendest, könnte die Aufgabe mittels MSEgui komplett ohne code gelöst werden.
Noch ein Hinweis: in MSEgui brauchst du keine TLabel zur Eingabefeld-Beschriftung, benutze die t*editwidget.frame.caption Eigenschaft.

Martin

Edit: Ich sehe erst jetzt, dass unter Linux MySQL benutzt wird, so dürfte der Unterschied nicht in Linux oder Windows sondern in ODBC oder MySQL liegen.

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Datenbanken mit MSEide+MSEgui

Beitrag von KOBOLD Messring GmbH »

Martin ... ¡¡DU BIST EIN GENIE!!
daran lags. Einfache Anführungszeichen ... schon funktioniert`s.
Da wär ich ja nie drauf gekommen, wo doch die Microsoft-Programmierer grosse Fans von den doppelten Anführungszeichen zu sein scheinen (siehe VB-, VBA-Code)
VIELEN VIELEN DANK, Du hast mein Projekt gerettet.

P.S. Damit funktioniert auch die Lazarus-Komponente.
Klar, Du hast Recht, mit dem Abfragen der ID, sollte auch nur ein kleines Beispiel sein.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Datenbanken mit MSEide+MSEgui

Beitrag von mse »

KOBOLD Messring GmbH hat geschrieben: Klar, Du hast Recht, mit dem Abfragen der ID, sollte auch nur ein kleines Beispiel sein.
Ich meine nicht nur die ID-Erzeugung, sondern auch die insert- update- und delete SQL Statements, welche automatisch gebildet werden können. Mittels SQLDB und den MSEgui DB-Editkomponenten kann man mit modernen SQL-Datenbanken arbeiten wie zu dBase-Zeiten und trotzdem die weiterführenden SQL-Möglichkeiten nutzen. Für kleine lokale Datebanken bietet sich insbesondere auch SQLite3 an.

Martin

Antworten