Gettablenames

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Gettablenames

Beitragvon Aphadias » 8. Okt 2018, 17:47 Gettablenames

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?
Aphadias
 
Beiträge: 123
Registriert: 28. Okt 2015, 18:28

Beitragvon Socke » 9. Okt 2018, 08:58 Re: Gettablenames

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
Socke
 
Beiträge: 2546
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon wp_xyz » 9. Okt 2018, 09:06 Re: Gettablenames

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.
wp_xyz
 
Beiträge: 2651
Registriert: 8. Apr 2011, 08:01

Beitragvon Aphadias » 10. Okt 2018, 18:56 Re: Gettablenames

@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: 123
Registriert: 28. Okt 2015, 18:28

Beitragvon Aphadias » 10. Okt 2018, 19:59 Re: Gettablenames

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
Aphadias
 
Beiträge: 123
Registriert: 28. Okt 2015, 18:28

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste

porpoises-institution
accuracy-worried