Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank-Felder in Array (https://www.delphipraxis.net/74936-datenbank-felder-array.html)

drschubi 11. Aug 2006 08:14

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:
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;
..
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?

Wie löst Ihr diese Zugriffe ?

Vielen Dank

René

Jelly 11. Aug 2006 08:29

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.

DocE 11. Aug 2006 08:31

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:
type
  TMeinDatenatz = record
    shopnr: string;
    shop_name: string;
    ...
  end;

...

public/private
  MeinArray: array of TMeinDatensatz;

...
Dann könntest Du diese z.B. mit MeinArray[0].shopnr ansprechen.

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

drschubi 11. Aug 2006 10:12

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é

DocE 11. Aug 2006 10:37

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:
type
  TMeinFeld = record
    Feld: string;
    Wert: string; // oder Variant;
  end;

...

public/private
  MeinArray: array of TMeinFeld;
Dann:

Delphi-Quellcode:
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;
So könntest Du die Werte in die DB schreiben:

Delphi-Quellcode:
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;
Wenn Du ein Feld suchst wieder mit ner for-Schleife durchsuchen:

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

Jürgen Thomas 11. Aug 2006 10:55

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:
SELECT RDB$FIELD_NAME FROM RDB$RELATION_FIELDS
WHERE RDB$RELATION_NAME = 'SHOP'
Das Ergebnis dieser Abfrage könnte z.B. in die Items einer ListBox eingetragen werden (je nach Zweck).

Viel Erfolg! Jürgen

drschubi 11. Aug 2006 11:17

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.

http://www.tutorials.de/forum/php-tu...al-anders.html


Wie kan ich das in Delphi umsetzen?


Gruß René


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz