Datenbank im Zugriff, und dann....

Spezielle Fragen zu PostgreSQL, MySQL, SQLite, SQL ...
Antworten
thorstenstueker
Foriker
Beiträge: 2
Registriert: Do 27. Jul 2006, 11:27
Kontaktdaten:

Datenbank im Zugriff, und dann....

Beitrag von thorstenstueker » Do 27. Jul 2006, 11:31

Also: ich habe mit den gegebenen Beispielen einen Zugriff zur Datenbank erhalten, habe aber jetzt das Problem, dass ich nicht weiß, wie ich Feldinhalte mit den SQL-Results verbinde bzw. den SQL-Result auf unterschiedliche Variablen aufteile.

Falls einer eine Idee hat: DANKE! :D

Dirk.M
Foriker
Beiträge: 2
Registriert: So 19. Feb 2006, 17:40
Kontaktdaten:

Re: Datenbank im Zugriff, und dann....

Beitrag von Dirk.M » So 3. Sep 2006, 23:05

Hallo Thorsten,
thorstenstueker hat geschrieben:Also: ich habe mit den gegebenen Beispielen einen Zugriff zur Datenbank erhalten, habe aber jetzt das Problem, dass ich nicht weiß, wie ich Feldinhalte mit den SQL-Results verbinde bzw. den SQL-Result auf unterschiedliche Variablen aufteile.
ja das Problem kenne ich auch. Auch beim mitglieferten Datenbankbeispiel kann man wenig erkennen. Habe aber im Internet noch ein Beispiel gefunden (frag mich nur nicht woher, ist schon länger her) und so habe ich das gelöst.

Definiere eine Variable
PUBLIC cn AS NEW Connection
PUBLIC rs AS Result

In einer Subroutine, die z.B. das Formular öffnet und die Verbindung zur Mysql-Datenbank aufgebaut wird, schreibst du

'Verbindung zur Datenbank
WITH cn
.Type = "mysql"
.Host = "localhost"
.Login = "dirk"
.Password = ""
.Name = "Optodatex"
END WITH

'Öffnen der Datenbank Stammdaten
TRY cn.Open
IF ERROR THEN
PRINT "Cannot Open Database. Error = "; Error.Text
ELSE
'Aufnahme der Datensätze in die Variable mittels SQL-Befehl
rs = cn.Exec("SELECT * FROM Stammdaten")



In einer weiteren Subroutine kannst du dann die Datenfelder mit den Formularfeldern verbinden

PRIVATE SUB updateFieldValue()
DIM xquery AS String
DIM rows AS Integer
DIM I AS Integer
'Datenfelder füllen
txtKdnr.Text = rs!kdnr
xquery = rs!kdnr
txtAnrede.Text = rs!titel
txtTitel.Text = rs!anrede
txtVorname.Text = rs!vname
txtZuname.Text = rs!zname
txtGebdat.Text = rs!datum
txtStrasse.Text = rs!strasse
txtPLZ.Text = rs!plz
txtOrt.Text = rs!ort
txtTelefon1.Text = rs!telefon1
txtTelefon2.Text = rs!telefon2
txtKasse.Text = rs!kasse
txtKassennr.Text = rs!kassennr
txtVersnr.Text = rs!versichert
txtGueltig.Text = rs!gultig
txtStatus.Text = rs!status
txtStatusnr.Text = rs!nrstatus
' Auftragsdaten für Tabelle auslesen
rs2 = cn.Exec("SELECT `Stammdaten`.`kdnr`, `Zentraldaten`.`kdnr`, `Zentraldaten`.`aufart`, `Zentraldaten`.`aufnr`, `Zentraldaten`.`adatum` FROM `Optodatex`.`Zentraldaten` `Zentraldaten`, `Optodatex`.`Stammdaten` `Stammdaten` WHERE ( `Zentraldaten`.`kdnr` = `Stammdaten`.`kdnr` ) AND ( ( `Zentraldaten`.`kdnr` = &1) ) ORDER BY `Stammdaten`.`kdnr` Asc", xquery)
rows = rs2.Count
gridAuftr.Columns.Count = 3
gridAuftr.Rows.Count = rows + 1
gridAuftr[0, 0].Text = "Auftragsnr."
gridAuftr[0, 1].Text = "Datum"
gridAuftr[0, 2].Text = "Art"
FOR I = 1 TO rows
gridAuftr[I, 0].Text = rs2!aufnr
gridAuftr[I, 1].Text = rs2!adatum
gridAuftr[I, 2].Text = rs2!aufart
rs2.MoveNext
NEXT
END


Falls einer der hier mitlesenden eine andere vorgehensweise kennt, bitte melden. Wie man im obigen Beispiel sieht, habe ich für den Anfang gerade mal 20 Datenbankfelder.
Das von mir angestrebte Programm zur Kunden und Auftragsverwaltung wird aber weit über 500 Datenfelder in verknüpften Datenbanken besitzen.
Gibt es eine bessere Lösung als alle diese Datenfelder von Hand mit den Formularfeldern zu verknüpfen.

Gruß Dirk

rolf
Foriker
Beiträge: 24
Registriert: Mi 4. Jan 2006, 12:37
Wohnort: Frankfurt/Main
Kontaktdaten:

Beitrag von rolf » Di 5. Sep 2006, 17:19

Hallo Dirk,


[quote]Gibt es eine bessere Lösung als alle diese Datenfelder von Hand mit den Formularfeldern zu verknüpfen. [/quote]

Ich verwende eine Tableview, um große Datenmengen anzuzeigen (siehe Datenbankbeispiel von Benoit).

Andererseits kannst Du auch ein Objekt-Array mit deinen Formularfeldern, die Du dann per Schleife füllen kannst.

[code]
DIM hObject AS Object
DIM textfelder AS Object[]

hObject = ME ' oder ein Container im Formular

FOR EACH hObject IN hObject.Children
IF InStr(Lower$(Str$(hObject)), "textbox") THEN
textfelder.Add(hObject)
ENDIF
NEXT
[/code]

Darauf kannst Du dann wie folgt zugreifen:
[code]
FOR i = 0 TO n
textfelder[i].Text = "Inhalt des Datenbankfeldes"
NEXT
[/code]

HTH
Rolf

Dirk.M
Foriker
Beiträge: 2
Registriert: So 19. Feb 2006, 17:40
Kontaktdaten:

Beitrag von Dirk.M » Di 5. Sep 2006, 18:10

[quote=rolf]
Ich verwende eine Tableview, um große Datenmengen anzuzeigen (siehe Datenbankbeispiel von Benoit).

Andererseits kannst Du auch ein Objekt-Array mit deinen Formularfeldern, die Du dann per Schleife füllen kannst.

[code]
DIM hObject AS Object
DIM textfelder AS Object[]

hObject = ME ' oder ein Container im Formular

FOR EACH hObject IN hObject.Children
IF InStr(Lower$(Str$(hObject)), "textbox") THEN
textfelder.Add(hObject)
ENDIF
NEXT
[/code]

Darauf kannst Du dann wie folgt zugreifen:
[code]
FOR i = 0 TO n
textfelder[i].Text = "Inhalt des Datenbankfeldes"
NEXT
[/code]

HTH
Rolf
[/quote]

Vielen Dank für die Antwort
Mit dieser Idee habe ich mich auch befasst. Allerdings haben die Feldnamen der Datenbank und des Formulars Bezeichnungen, die im Quelltext leichter lesbar sind, da ich teilweise mit den Feldinhalten auch Berechnungen durchführen muss. [/quote]

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste