AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Tabelle durch String auswählen
Thema durchsuchen
Ansicht
Themen-Optionen

Tabelle durch String auswählen

Ein Thema von Smiley · begonnen am 23. Feb 2008 · letzter Beitrag vom 24. Feb 2008
Antwort Antwort
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
205 Beiträge
 
Delphi 10.4 Sydney
 
#1

Tabelle durch String auswählen

  Alt 23. Feb 2008, 14:49
Datenbank: Access • Zugriff über: ADO
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:
//******************************************************************************
//***************** 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;
.....usw.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Tabelle durch String auswählen

  Alt 23. Feb 2008, 14:58
Hast Du es mal mit FindComponent versucht?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Tabelle durch String auswählen

  Alt 23. Feb 2008, 17:30
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
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
205 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Tabelle durch String auswählen

  Alt 23. Feb 2008, 18:09
Die vielen Tables und Datsourcen sind für dir DBComboBoxen die ich im Formular habe.
Wie soll ich sonst 38 DBComboBoxen gleichzeitig anzeigen.
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
205 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Tabelle durch String auswählen

  Alt 23. Feb 2008, 18:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Tabelle durch String auswählen

  Alt 23. Feb 2008, 18:24
Ungetestet:
Delphi-Quellcode:
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]);
[edit] Eigentlich ist das aber ziemlicher Blödsinn! Das müsste doch auch so gehen:
Delphi-Quellcode:
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);
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
205 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Tabelle durch String auswählen

  Alt 24. Feb 2008, 08:01
Danke DeddyH jetzt hab ichs hinbekommen.

Es muss so heißen:
Delphi-Quellcode:
  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;
Damit funktioniert es, man muss noch das TADOTable davor setzen, das war aber nicht mehr so schwer herauszufinden.
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Tabelle durch String auswählen

  Alt 24. Feb 2008, 08:13
Moin,

Zitat von Smiley:
... 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. ...
bis D7 ist die Vorgehensweise einfach: Bezeichner markieren und mit F1 die Kontexthilfe öffnen.

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
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
205 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Tabelle durch String auswählen

  Alt 24. Feb 2008, 09:17
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.
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
205 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Tabelle durch String auswählen

  Alt 24. Feb 2008, 09:26
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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