AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Field exists

Ein Thema von bernhard_LA · begonnen am 20. Dez 2014 · letzter Beitrag vom 3. Feb 2019
Antwort Antwort
Seite 1 von 2  1 2      
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#1

Field exists

  Alt 20. Dez 2014, 13:51
Datenbank: MSSQL • Version: 12 • Zugriff über: ADO
Hallo ,


wie frage ich denn am besten bei einer sehr großen DB Tabelle ab ob ein bestimmtes Feld existiert oder nicht

Ich möchte ***Keine *** Query oder Tabelle öffnen ... mit doesem Code habe ich deshalb so meine Probleme



Delphi-Quellcode:
function FindFieldInDB (DataSet: TDataSet; FieldName: String): Boolean;
var
  findField: TField;
begin
  Result := false; {Posit failure}

  findField := nil;
  findField := DataSet.FindField(FieldName);
  if Assigned(findField) then
  begin
    Result := not (findField.Calculated);
  end;
end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Field exists

  Alt 20. Dez 2014, 14:03
Entweder Datenmenge einschränken

select ... where <PK> = -1; o.ä.

Oder eine Abfage auf die Metadaten

http://msdn.microsoft.com/en-us/magazine/cc164065.aspx
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Field exists

  Alt 20. Dez 2014, 14:26
Entweder Datenmenge einschränken

select ... where <PK> = -1; o.ä.
Das mache ich seit jahren so:

Code:
select * from tabellenname where 0 = 1;
Und dann durch die Fields-Auflistung gehen ob das Feld drin ist.
Damit man das nicht permanent machen muss wird das dann gemerkt welche Felder die Tabelle hat.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Field exists

  Alt 20. Dez 2014, 15:18
Entweder Datenmenge einschränken

select ... where <PK> = -1; o.ä.

Oder eine Abfage auf die Metadaten

http://msdn.microsoft.com/en-us/magazine/cc164065.aspx
Beides ist mit dem Öffnen einer Query verbunden und entspricht somit nicht den Anforderungen des TE (ganz unabhängig davon, wie sinnfrei diese sein mögen).
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#5

AW: Field exists

  Alt 20. Dez 2014, 15:31
Beides ist mit dem Öffnen einer Query verbunden und entspricht somit nicht den Anforderungen des TE (ganz unabhängig davon, wie sinnfrei diese sein mögen).
Wenn die Einschränkung einzig aus dem Grund existiert, um die Datenmenge klein zu halten, ist es doch durchaus zulässig, auf diese spezielle Form der Query hinzuweisen, oder? Schließlich gilt es hier, ein real existierendes Problem zu lösen und nicht eine Quizfrage: "Wie ermittele ich die Felder einer Tabelle ohne eine Abfrage zu öffnen?"
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Field exists

  Alt 20. Dez 2014, 15:47
Beides ist mit dem Öffnen einer Query verbunden und entspricht somit nicht den Anforderungen des TE (ganz unabhängig davon, wie sinnfrei diese sein mögen).
Der MS SQL-Server hat auch noch weitere API. Die gewünschten Infos sollten auch über SMO abfragbar sein.
Hat halt den Nachteil das diese API auch installiert sein muss.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Field exists

  Alt 20. Dez 2014, 16:25
Und dann gibt es auch noch ADOX (ADO Extensions).
ADOX ist unabhängig vom Datenbank Provider.
Man muss eigentlich nur die Typbibliothek importieren und am Besten gleich beim Import die Klassennamen umbenennen um Namenskollisionen zu vermeiden (zumindest bei älteren Delphi Versionen die das Namespace Konzept noch nicht kennen ist das sinnvoll).
fork me on Github
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: Field exists

  Alt 20. Dez 2014, 22:42
wie frage ich denn am besten bei einer sehr großen DB Tabelle ab ob ein bestimmtes Feld existiert oder nicht
Ich möchte ***Keine *** Query oder Tabelle öffnen ... mit doesem Code habe ich deshalb so meine Probleme
Wenn ich dich richtig verstanden habe, möchtest du nicht auf irgendwelche Feldinhalte prüfen (das wäre eine SQL-Query), sondern nachschauen, ob in einer bestimmten Tabelle ein bestimmtes Feld existiert. Da du wohl die dbGo-Komponenten verwendest, würde es sich doch anbieten, über deine Connection-Komponente zuerst die verfügbaren Tabellen abzufragen und danach über dieselbe Komponente die in der jeweiligen Tabelle existierenden Felder:
Delphi-Quellcode:
// Tabellen abfragen - der Boolean-Parameter ist für Systemtabellen
  ADOConnection1.GetTableNames(TabellenListe, False);

// Felder abfragen
  ADOConnection1.GetFieldNames(TabellenName, FeldListe);
Beide Proceduren liefern eine Stringliste zurück, die die gewünschten Daten enthält. Die FeldListe befragst du dann mit IndexOf nach dem gesuchten Feldnamen (ein String).
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#9

AW: Field exists

  Alt 21. Dez 2014, 08:25
Schade, dass es hier kein Like oder ein Voting für gute Antworten gibt...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

AW: Field exists

  Alt 21. Dez 2014, 08:43
Aber am Ende baut auch diese Funktion eine Verbindung zur Datenbank auf und macht eine Query.

SQL-Code:
SELECT * FROM &Table WHERE False -- Assigned(FindField(FieldName))

SELECT &FieldName FROM &Table WHERE False -- Try-Except -> False
Diese Varianten haben aber auch einen Vorteil, nämlich wenn man seinen Code unabhängig vom DBMS und den Zugriffskomponenten bauen will.
Oder man schiebt den Aufruf von GetTableNames und Co. in eine eigene Funktion, welche man bei Änderungen dann anpassen kann/muß.
$2B or not $2B

Geändert von himitsu (21. Dez 2014 um 08:46 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:51 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