Gettablenames

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Aphadias
Beiträge: 124
Registriert: Mi 28. Okt 2015, 18:28

Gettablenames

Beitrag von Aphadias »

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  con.LibraryLocation:=ExtractFilePath(ParamStr(0)) + 'sqlite3.dll';
  con.Database:=daten.FileName;
  con.Connected:=true;
 
  if daten.FileName = '' then
  begin
    ShowMessage('Erst eine Datenbank auswählen!');
  end
  else
  begin
    con.GetTableNames(myStringList);
      If myStringList.IndexOf('o2')=-1 then
        ShowMessage('Tabelle nicht vorhanden')
      else
        ShowMessage('Tabelle vorhanden');   
  end;
end;   


moin... ich wollte einen Updater schreiben und dazu nachfragen ob es die Tabelle o2 schon gibt. Leider gibt er mir bei gettablenames die Fehlermeldung raus -> unit1.pas(66,36) Error: Wrong number of parameters specified for call to "GetTableNames"

mystringlist ist eine globale Variable vom Typ Array of String.... wieso will er dort eine Nummer haben?

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Gettablenames

Beitrag von Socke »

Welche Datenbank-Komponenten verwendest du denn?
Falls du TSQLite3Connection (Package SQLdb) verwendest, brauchst du eine String-Liste (z.B. TStringList) und kannst keinen Array verwenden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Gettablenames

Beitrag von wp_xyz »

Aphadias hat geschrieben:mystringlist ist eine globale Variable vom Typ Array of String.

Nicht dein Problem, aber: Warum machst du das global? Muss dein Programm aus jeder Situation absolut ohne Vorarbeit auf die Tabellennamen zugreifen können? Oder verwendest du das Array gar auch noch für andere Zwecke? Dann ist für Probleme vorgesorgt, denn aber einer gewissen Komplexität deines Programmes wirst du nicht mehr wissen, welche Daten aktuell in dem globalen Array stehen. Besser: deklariere MyStringList lokal in der Routine, in der du das Array brauchst. Und wenn MyStringList irgendwann nicht mehr ein Array sondern eine echte TStringList ist, kannst du die Daten da auch gleich wieder freigeben.

Aphadias
Beiträge: 124
Registriert: Mi 28. Okt 2015, 18:28

Re: Gettablenames

Beitrag von Aphadias »

@wp_xyz das gleiche habe ich wie ich zu Bett gegangen bin auch gedacht. Das ändere ich jetzt gleich mal weil es eigentlich keinen Sinn macht.

@Socke ich benutze Zeos für die Verbindung

Aphadias
Beiträge: 124
Registriert: Mi 28. Okt 2015, 18:28

Re: Gettablenames

Beitrag von Aphadias »

ich habe es jetzt wie folgt gelöst nach mehreren Fehlermeldung..

ich weiß nicht was pattern ist aber damit konnte ich es umgehen ->

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  myStringList:TStringList;
begin
  con.LibraryLocation:=ExtractFilePath(ParamStr(0)) + 'sqlite3.dll';
  con.Database:=daten.FileName;
  con.Connected:=true;
 
  myStringList:=TStringList.Create;
 
  if daten.FileName = '' then
  begin
    ShowMessage('Erst eine Datenbank auswählen!');
  end
  else
  begin
    con.GetTableNames('',myStringList);
      If myStringList.IndexOf('o2')=-1 then
        ShowMessage('nicht vorhanden.');
      else
        ShowMessage('vorhanden.');
 
 
  end;
end;


1. habe ich jetzt kein Array mehr genommen weil er dann einen anderen Fehler gezeigt hat und 2. habe ich bei gettablenames ein ' ' vor mystringlist gesetzt und es geht

Antworten