Autor Beitrag
makena76
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Do 19.06.03 16:08 
Hallo Leute,

ich würde gernen einen Datenserver in meiner Anwendung einbauen. Dieser Datenserver erhält Daten einer anderen Komponente, die einwandfrei zugeordnet werden können anhand eines Index (Integerwertes).

Nun soll dieser Datenserver je nach Index in verschiedene Tabellen schreiben. Also z.B. Index=1 -> Alle Daten in Tabelle1, Index=2 -> Alle Daten in Tabelle2, usw.

Wie macht man so etwas am einfachsten? Ich habe noch nicht so recht einen Schimmer wie das gehen soll :-(

Problem: Je Anwender sind es nicht gleich viele Tabellen, es muss also frei konfigurierbar sein.

Wenn ich die Tabellen zur Laufzeit anlege, habe ich zwar genau den Bedarf an TTables, doch weiß ich nicht, wie ich dann einzelne Tabellen geschickt "anspreche".

Und wenn ich ein Array of TTable anlege, habe ich das Problem, nicht genau zu wissen wie groß das Array sein soll.

Ich hoffe ich habe mein Problem jetzt einigermaßen verständlich rübergebracht. Wäre super wenn mir da jemand auf die Sprünge helfen könnte.

cu makena
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Do 19.06.03 19:18 
Hallo makena76,

du könntest einen Array[0..n] of TTable erstellen und darüber dann auf die Tabelle zugreifen oder du erstellst dynamisch eine Query, die den korrekten Tabellennamen in das SQL Feld der TQuery Komponente schreibt.

_________________
Live long and prosper
MrSpock \\//
makena76 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Do 19.06.03 19:55 
Hallo MrSpock,

ja das hatte ich befürchtet. Ein Array of TTable ist wohl das einfachste, oder? Ich hatte gehofft, dass es noch irgend etwas anderes gibt. Wie wirkt sich denn das Array auf die Speichernutzung/CPU-Bedarf des Programms aus?

Kann ich z.B. 100 TTables erstellen ohne Perfomanceverluste? Ich weiß ja nicht genau wieviele TTables im Array benötigt werden. Oder gibts es eine Möglichkeit das Array nachträglich zu erweitern? Das wäre dann genial. Also ich starte mit 10 Tables und bei Bedarf eben 11,12, usw.

Die Möglichkeit mit dem Query scheidet IMO aus, denn ich hab pro Sekunde evtl. mehrere Zugriffe.

cu makena
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Do 19.06.03 20:07 
Hallo makena76,

ja, es gibt dynamische Arrays, bei denen du die Größe nachträglich ändern kannst. Bei einer sehr großen Anzahl an Tabellen kannst du aber auch nur ein TTable Objekt benutzen und den TableName entsprechend vor dem Öffnen der Tabelle anpassen. So musst du dir im Array nur noch die Tabellennamen merken.

_________________
Live long and prosper
MrSpock \\//
makena76 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Do 19.06.03 20:45 
Hi MrSpock,

jetzt tauchen eine Reihe von Problemen auf:

1. Wenn ich das Array of Table ansprechen will erhalte ich sofort Zugriffsverletzung:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Im Var Teil des Forms:
 MyTables: array[0..10of TAdsTable;
 .
 .
 .

Entsprechende Procedure:
 with MyTables[i] do begin
     Active:=False; // <- bricht schon hier ab
     DatabaseName:=ExtractFileDir(tmpTable);
     TableName:=ExtractFileName(tmpTable);
     Active:=True;
 end;


2. Dynamisches Array auf Table. Wenn ich das mit SetLength(...) verändern will, kommt Fehler "Inkompatible Typen".

cu makena
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Do 19.06.03 22:16 
Hallo makena76,

durch die Deklaration des Arrays hast du bisher nur den Platz geschaffen, um TTable Objekte aufzunehmen (oder besser gesagt, je eine Adresse eines TTable Objekts pro Eintrag).

Hast du zur Designzeit bereits die TTable Objekte in dein Datenmodul (oder in irgendein Formular) eingefügt oder willst du die TTable Objekte dynamisch erzeugen?

In deiner Anweisung Active:=False (besser wäre close), versuchst du jetzt auf ein Objekt zuzugreifen, das noch gar nicht existiert.

_________________
Live long and prosper
MrSpock \\//
makena76 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Fr 20.06.03 08:35 
Hallo MrSpock,

danke für Deine nette Hilfe. Hmm, so ganz fit bin ich mit Arrays wohl nicht. Also ich denke mal ich brauche alles dynamisch sonst macht das keinen Sinn.

Muss ich dann wohl jede Table[] noch erzeugen? Also MyTable[i]:=TAdsTable.Create(Self)? Kann es leider grad nicht ausprobieren. Melde mich abends wenn ich weiterprobieren kann.

Und um das dynamische Array dann abzuschneiden bzw. zu begrenzen nimmt man ja scheinbar SetLength wie ich hier im Forum gelesen habe. Aber wieso klappt dann SetLength(MyTables,i+1) wenn i die max. Anzahl ist, nicht?

Ach ich hätte wohl doch mehr mit Informatik studieren sollen ;-)

cu makena
Cashels
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167



BeitragVerfasst: Fr 20.06.03 10:41 
makena76 hat folgendes geschrieben:
Muss ich dann wohl jede Table[] noch erzeugen? Also MyTable[i]:=TAdsTable.Create(Self)?

Ja, genau so ists.

makena76 hat folgendes geschrieben:
Aber wieso klappt dann SetLength(MyTables,i+1) wenn i die max. Anzahl ist, nicht?

Wie ist denn dein Array deklariert. Etwa noch als
ausblenden Quelltext
1:
MyTables: array[0..10] of TAdsTable;					
? Wie gross ist dein i. Zuerst mal werden dynamische Arrays einfach mitMyTables: array of TAdsTable;deklariert. Dann sollte es klappen.

makena76 hat folgendes geschrieben:

Ach ich hätte wohl doch mehr mit Informatik studieren sollen ;-)


Nö, hab ich auch nicht. 8)
Gruss,
tom
makena76 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Fr 20.06.03 13:18 
Hi Cashels,

ok thanx, werde ich später am anderen Rechner mal testen.

Naja wenn man das nur als Hobby (zwar schon 8 Jahre) macht, kommt man sich hier manchmal wie der letzte Idiot vor. Bin momentan in einer Datenbankvorlesung, ist schon sehr interessant was man da mitbekommt.

cu makena[/quote]
makena76 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Fr 20.06.03 20:25 
So habs probiert, alles geht perfekt :) Danke Euch allen.

cu makena