![]() |
Datenbank: MySql • Version: 5 • Zugriff über: ZeosLib
Datenbank-Felder in Array
Guten Morgen,
um späteren Pflegaufwand zu verringern, möchte ich die ca. 70 Datenbank-Felder einer DB in ein Array schreiben, um dann zur Laufzeit beim Lesen/Schreiben der DB mittels diesem Aaray auf die DB zuzugreifen. Zur Zeit lese ich die Shopdaten so:
Delphi-Quellcode:
Leider habe ich noch nie mit Arrays gearbeitet, die Delphi - Hilfe erklärt Arrays etwas umständlich, was muss ich bei Arrays beachten und wie könnte eine Lösung im Ansatz aussehen?
procedure TForm1.ReadShopdaten;
begin edshopnr.Text := zquery1.FieldByName('shopnr').AsString; edshopname.Text := zquery1.FieldByName('shop_name').AsString; edinstitute.Text := zquery1.FieldByName('institute').AsString; cbform_of_adress.Text := zquery1.FieldByName('form_of_adress').AsString; cbform_of_adress.ItemIndex := 0; cbtitle.Text := zquery1.FieldByName('title').AsString; cbtitle.ItemIndex := 0; edsurname.Text := zquery1.FieldByName('surname').AsString; edfirstname.Text := zquery1.FieldByName('firstname').AsString; edadress.Text := zquery1.FieldByName('adress').AsString; edcitycode.Text := zquery1.FieldByName('citycode').AsString; edcity.Text := zquery1.FieldByName('city').AsString; .. Wie löst Ihr diese Zugriffe ? Vielen Dank René |
Re: Datenbank-Felder in Array
Warum werden immer wieder Array genutzt... Unter OOP gibts doch Besseres... Ich würde für dein Vorhaben auf TCollection und TCollectionItem zurückgreifen.
|
Re: Datenbank-Felder in Array
Hallo drschubi,
möchtest Du einen Datensatz oder mehrere in einem Array speichern? Für einen Datensatz empfiehlt sich ein Array nicht gerade, da Du diesen nur über einen Integer-Wert ansprechen kannst. shopnr wäre dann z.B. MeinArray[0] und shop_name z.B. MeinArray[1]. Also etwas unübersichtlich. Bei mehreren Datensätzen könntest Du zunächst einen eigenen type deklarieren und daraus einen Array machen, z.B.
Delphi-Quellcode:
Dann könntest Du diese z.B. mit MeinArray[0].shopnr ansprechen.
type
TMeinDatenatz = record shopnr: string; shop_name: string; ... end; ... public/private MeinArray: array of TMeinDatensatz; ... Wieso greifst Du nicht mit TDBEdits & Co. auf die Datenbank zu und lässt diese den Rest machen? Beschreib doch noch einmal kurz, was Du genau machen möchtest, damit wir die richtige Lösung finden können. Grüsse ...Doc |
Re: Datenbank-Felder in Array
Hallo Doc,
ich nutze zur Zeit die DB-Komponenten, möchte aber mehr Flexibilität bei den Eingaben. Deshalb wollte ich einfach weg von dieser Komponente und einfache Edit-Felder nutzen. Deshalb und um den Schreib- und Pflegeaufwand so gering wie möglich zu halten, dachte ich an Arrays. Gruß René |
Re: Datenbank-Felder in Array
Ich denke, durch die Verwendung von Arrays wird es eher mehr Schreib- und Pflegeaufwand.
Wie wäre es mit den OnGetText/OnSetText Events? Ansonsten könntest Du folgendes machen:
Delphi-Quellcode:
Dann:
type
TMeinFeld = record Feld: string; Wert: string; // oder Variant; end; ... public/private MeinArray: array of TMeinFeld;
Delphi-Quellcode:
So könntest Du die Werte in die DB schreiben:
procedure TForm1.ReadShopdaten;
var i: integer; begin SetLength(MeinArray,Query.Fields.Count); for i:=0 to Query.Fields.Count-1 do begin MeinArray[i].Feld := Query.Fields[i].FieldName; MeinArray[i].Wert := Query.Fields[i].AsString; end; end;
Delphi-Quellcode:
Wenn Du ein Feld suchst wieder mit ner for-Schleife durchsuchen:
procedure TForm1.WriteShopdaten;
var i: integer; begin for i:=0 to High(MeinArray) do begin Query.FieldByName(MeinArray[i].Feld).AsString := MeinArray[i].Wert; end; end;
Delphi-Quellcode:
for i:=0 to High(MeinArray) do
begin if MeinArray[i].Feld = GesuchtesFeld then begin ... // z.B. Wert lesen oder schreiben break; end; end; Das ganze ist aber meiner Meinung nach mehr Schreibaufwand, da Du praktisch einen Teil der Query nachprogrammierst. Grüsse ...Doc |
Re: Datenbank-Felder in Array
Oder geht es Dir um die Liste der Tabellenfelder, die im Programm zur Verfügung gestellt werden, damit variable SELECT zusammengestellt werden können?
Wie dies in MySQL zu lösen wäre, weiß ich nicht. Ich bin mir aber sicher, dass auch MySQL die Tabellenfelder in Systemtabellen speichert. Damit ließe sich das so regeln (Interbase-Variante):
SQL-Code:
Das Ergebnis dieser Abfrage könnte z.B. in die Items einer ListBox eingetragen werden (je nach Zweck).
SELECT RDB$FIELD_NAME FROM RDB$RELATION_FIELDS
WHERE RDB$RELATION_NAME = 'SHOP' Viel Erfolg! Jürgen |
Re: Datenbank-Felder in Array
Hallo danke erst mal an alle, ich habe gerade etwas unter tutorials.de gefunden das zwar für Php, aber in etwa dem entspricht, was ich in Delphi erreichen will.
![]() Wie kan ich das in Delphi umsetzen? Gruß René |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz