![]() |
Datenbank: Access • Zugriff über: ADO
Tabelle durch String auswählen
Ich lese aus einer Datei den Tabellennamen und die dazugehörigen daten ein und will diese eintragen.
Dazu setze ich den Tabellennamen anhand eines Strings den ich aus der Datei bekomme auf eine temporäre Tabelle und schreibe die Daten rein. Dazu habe ich mir folgendes Konstrukt einfallen lassen, was mir aber dafür sehr aufwendig erscheint. Bestimmt gibt es eine ganz einfache Lösung um den Tabellennamen zu setzen, dafür brauche ich Eure Hilfe. In meinem DataModul DM sind alle Tabellen angelegt.
Delphi-Quellcode:
.....usw.
//******************************************************************************
//***************** Tabelle setzen anhand von String *************************** //****************************************************************************** Procedure SetTbl(Tbl:String); Var DB:TADOTable; Ind: Byte; i:Byte; Const ArrayTbl: Array [0,38] of String=('Herst','VerpEinh','AE','Spur','System'........); Begin for i:= 0 to 38 do if Tbl=ArrayTbl[i] then Ind:=i; case Ind of 0: begin DB := DM.TBHerst; DBGrid1.DataSource := DM.DSHerst; end; 1: begin DB := DM.TBVerpEinh; DBGrid1.DataSource := DM.DSVerpEinh; end; |
Re: Tabelle durch String auswählen
Hast Du es mal mit FindComponent versucht?
|
Re: Tabelle durch String auswählen
Hallo Smiley,
warum arbeitest du mit 39 TADOTable- und 39 TDataSource-Komponenten in deinem Datenmodul? Du solltest genau eine DataSource haben - und diese gehört auf die Form mit dem Grid. Die Eigenschaft DataSet dieser DataSource wird bei Bedarf ausgewechselt. Statt der 39 TADOTables könntest du eine einzige TADODataSet verwenden und dort die Eigenschaft CommandText neu setzen, wenn auf eine andere Datenbanktabelle umgeschaltet werden soll. Freundliche Grüße |
Re: Tabelle durch String auswählen
Die vielen Tables und Datsourcen sind für dir DBComboBoxen die ich im Formular habe.
Wie soll ich sonst 38 DBComboBoxen gleichzeitig anzeigen. |
Re: Tabelle durch String auswählen
Das mit dem FindComponent ist ja prima, ich beschäftige mich auch schon die ganze Zeit damit, aber ich weiß nicht welche Unit ich einbinden muss damit der Compiler das akzeptiert.
Wie finde ich überhaupt eine Unit von einem Befehl. In der Hilfe steht nur dass es von TComponent abgeleitet ist, aber in welcher Unit ist TComponent drin ? Manchmal hängt man an solchen Grundlagenkleinigkeiten fest, dass man gar nicht zum programmieren kommt. Wenn man lange nichts macht vergisst man wieder so viel. |
Re: Tabelle durch String auswählen
Ungetestet:
Delphi-Quellcode:
[edit] Eigentlich ist das aber ziemlicher Blödsinn! Das müsste doch auch so gehen:
Procedure SetTbl(Tbl:String);
Var DB:TADOTable; Ind: Byte; i:Byte; Const ArrayTbl: Array [0,38] of String=('Herst','VerpEinh','AE','Spur','System'........); Begin for i:= 0 to 38 do if Tbl=ArrayTbl[i] then Ind:=i; DB := DM.FindComponent('TB' + ArrayTbl[Ind]); DBGrid1.DataSource := DM.FindComponent('DS' + ArrayTbl[Ind]);
Delphi-Quellcode:
[/edit]
Procedure SetTbl(Tbl:String);
Var DB:TADOTable; { Ind: Byte; i:Byte; Const ArrayTbl: Array [0,38] of String=('Herst','VerpEinh','AE','Spur','System'........);} Begin { for i:= 0 to 38 do if Tbl=ArrayTbl[i] then Ind:=i;} DB := DM.FindComponent('TB' + Tbl); DBGrid1.DataSource := DM.FindComponent('DS' + Tbl); |
Re: Tabelle durch String auswählen
Danke DeddyH jetzt hab ichs hinbekommen.
Es muss so heißen:
Delphi-Quellcode:
Damit funktioniert es, man muss noch das TADOTable davor setzen, das war aber nicht mehr so schwer herauszufinden.
procedure KategorieAusgeben(Kat: string);
begin DB:=TADOTable(DM.FindComponent('TB'+Kat)); end; procedure DatenAusgeben(Dat: string); begin DB.Append; DB.Fields[0].AsString:=Dat; DB.Post; Mehr Probleme hat mit die Meldung gemacht, dass der Befehl FindComponent nicht gefunden werden konnte. Nachdem ich dann irgendwann mal die Unit gespeichert habe, war der Fehler einfach weg. Das ist mir schon öfters vorgekommen, dass Delphi2006 eine Komponente als nicht gefunden anzeigt und nach dem speichern ist der Fehler plötzlich weg. Die Unit zum Einbinden in uses für FindComponent habe ich auch entdeckt, es ist StdCtrls, die stand aber schon die ganze Zeit drin. Wie ich herausfinde welche unit ich für eine Komponente einbinden muss, die mir das System anmeckert habe ich noch nicht herausgefunden. Falls so eine Liste in einem Buch steht oder in der Hilfe versteckt, kann mir jemand dazu mal Bescheid geben. Ich habe sehr viele Delphi Bücher hier, müsste nur wissen wo und wonach ich suchen soll. Danke nochmal für die freundliche Hilfe hier, selbst wenn man sehr einfache Fragen stellt bekommt man hier im Forum keine aggressiven Antworten von genervten Drachen und Biertrinkern. |
Re: Tabelle durch String auswählen
Moin,
Zitat:
Der relevante Unit-Name wird zwischen dem einleitenden Hilfetext und der Beschreibung hervorgehoben. Bei Methoden folgt man erst dem Link (oben links) zur Klasse. Sollte sich bei den neueren Delphi-Versionen etwas geändert haben? Freundliche Grüße |
Re: Tabelle durch String auswählen
Hier die Hilfeinformation von D2006:
--------------------------------------------------------------------------------------------- TComponent.FindComponent Methode Gibt an, ob der Komponente eine bestimmte Komponente untergeordnet ist. Klasse TComponent Syntax [Delphi] function FindComponent(const AName: string): TComponent; Beschreibung FindComponent gibt diejenige Komponente im Array Components zurück, deren Name mit dem String im Parameter AName übereinstimmt. Mit Hilfe von FindComponent können Sie feststellen, ob eine bestimmte Komponente einer anderen Komponente untergeordnet ist. Bie den Komponentennamen wird die Groß-/Kleinschreibung nicht berücksichtigt. Verwandte Informationen TComponent.Components TComponent.Owner TComponent.Name --------------------------------------------------------------------------------------------- Da steht nichts davon in welcher Unit die enthalten ist. |
Re: Tabelle durch String auswählen
Aahhhh, man muss sich erst zurückhangeln bis zur Klasse, dort steht dann die Info.
Also unter Klasse den Link TComponent anklicken und dann sieht man dort auch die Unit in der diese definiert ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 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 by Thomas Breitkreuz