Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [IBDAC] GetTableNames access violation (https://www.delphipraxis.net/171324-%5Bibdac%5D-gettablenames-access-violation.html)

messie 31. Okt 2012 14:49

Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC

[IBDAC] GetTableNames access violation
 
Moin,

wenn ich die Tabellen einer Datenbank abfragen möchte, bekomme ich eine access violation. Die Tabelle ist vorhanden und connected, Queries klappen auch. Übergeben bekommt die Methode TStrings. Wenn ich die vorher instanziiere, gibt es einen abstrakten Fehler, das ist also nicht richtig. In der Hilfe wird sie wie eine Wald- und Wiesenfunktion knapp beschrieben.

Was muss ich da noch beachten?

Danke, Messie

DeddyH 31. Okt 2012 14:51

AW: [IBDAC] GetTableNames access violation
 
Du instanzierst aber nicht zufällig ein TStrings-Objekt, oder?

messie 31. Okt 2012 14:57

AW: [IBDAC] GetTableNames access violation
 
Zitat:

Zitat von DeddyH (Beitrag 1189239)
Du instanzierst aber nicht zufällig ein TStrings-Objekt, oder?

Nö, das deklariere und übergebe ich.

Zitat:

procedure GetTableNames(List: _TStrings; AllTables : boolean = false); virtual;
List: A TStrings descendant that will be filled with table names

DeddyH 31. Okt 2012 14:58

AW: [IBDAC] GetTableNames access violation
 
Aber wie?
Delphi-Quellcode:
var
  Tablenames: TStrings;
begin
  Tablenames := TStrings.Create; //abstrakter Fehler
Delphi-Quellcode:
var
  Tablenames: TStrings;
begin
  Tablenames := TStringlist.Create; //kein abstrakter Fehler

messie 31. Okt 2012 15:03

AW: [IBDAC] GetTableNames access violation
 
Zitat:

Zitat von DeddyH (Beitrag 1189241)
Aber wie?
Delphi-Quellcode:
var
  Tablenames: TStrings;
begin
  Tablenames := TStrings.Create; //abstrakter Fehler
Delphi-Quellcode:
var
  Tablenames: TStrings;
begin
  Tablenames := TStringlist.Create; //kein abstrakter Fehler

Jepp, das war es. Wäre ich nach der Beschreibung nicht drauf gekommen, dass die Routine eine Instanz von TStrings braucht.

Danke! :thumb:

DeddyH 31. Okt 2012 15:06

AW: [IBDAC] GetTableNames access violation
 
Wenn man genau hinschaut, steht es ja auch da:
Zitat:

A TStrings descendant that will be filled with table names
TStrings ist ja nur eine abstrakte Basisklasse, die man nicht direkt instanzieren soll, sondern nur Nachkommen davon (wie z.B. TStringlist).

messie 31. Okt 2012 15:15

AW: [IBDAC] GetTableNames access violation
 
Zitat:

Zitat von DeddyH (Beitrag 1189243)
Wenn man genau hinschaut, steht es ja auch da:
Zitat:

A TStrings descendant that will be filled with table names
TStrings ist ja nur eine abstrakte Basisklasse, die man nicht direkt instanzieren soll, sondern nur Nachkommen davon (wie z.B. TStringlist).

Schon, ich hatte auch eine TStringList übergeben, vorher aber nicht erzeugt. Gleicher Fehler -> danach in falsche Richtung gedacht.
Ist mit descendant immer automatisch eine Instanz gemeint? Das wäre mir neu.

Grüße, Messie

DeddyH 31. Okt 2012 15:18

AW: [IBDAC] GetTableNames access violation
 
Nein, Descendant bedeutet Abkömmling, das ist das, was ich mit Nachkommen meinte. Und übergeben musst Du natürlich eine existierende Instanz, das kann die selbst angelegte TStringlist sein oder auch die Items einer Listbox oder so etwas.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 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