Autor Beitrag
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 11.03.11 12:19 
Rufst du direkt die Funktionen aus dem Wrapper auf? :shock:

Das find ich irgendwie gewagt. Warum verwendest du nicht die Klassen dafür wie bisher?

Wenn du z.B. "db." eintippst, dann kriegst du doch angezeigt was die Komponente kann. Das ist dann auch getestet und sollte gut funktionieren. Wenn du die Funktionen aus der SQLite3 direkt aufrufst, wer weiß was er da intern macht :nixweiss:

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Fr 11.03.11 12:21 
Ja schon, aber eigentlich müsste es doch auch so funktionieren.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 11.03.11 12:25 
Kann es sein, dass du die Klassen, die du verwendest, vorher initialisieren musst?

ausblenden Delphi-Quelltext
1:
sqlite3.SQLite3_Open('C:\temp\teschtlitedb.bcdb',db)					

Weil hier wäre ja db ein nil-Pointer. Wobei...es ist ja ein var-Parameter. Gute Frage.

Auf jeden Fall ruft die SQLite3.pas direkt die dll auf, da kann ich nichts dazu sagen. In welcher Zeile kommt denn die AV?

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Fr 11.03.11 12:28 
Das Problem tritt hier auf:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
begin

  if sqlite3.SQLite3_Open('C:\temp\teschtlitedb.bcdb',db) = 0 then
  begin

    sqlstring := PChar('SELECT name, ort FROM tescht');

--->>>>      if sqlite3.SQLite3_Exec(db,sqlstring,dbback,udata,error) = 0 then
      begin



      end
      else
      begin
         Memo1.Text := sqlite3.sqlite3_errmsg(db);
      end;
  end;
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 11.03.11 12:35 
Ok, dein dbBack ist eine Funktion:

ausblenden Delphi-Quelltext
1:
2:
    TSQLiteExecCallback = function(UserData: Pointer; NumCols: integer; ColValues:
    PPAnsiCharArray; ColNames: PPAnsiCharArray): integer; cdecl;


Du solltest diesem Dingens auch eine Funktion zuweisen. Gut möglich dass die dll da einfach was rüberschicken will, und dann krachts.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Fr 11.03.11 12:37 
Wie kann ich da eine Funktion zuweisen? Wie meinst du das?
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 11.03.11 12:40 
Vor deinem Aufruf:

ausblenden Delphi-Quelltext
1:
dbBack:=MyCallbackFunction;					


Und in deinem Projekt (weiter oben) definierst du die:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function MyCallbackFunction(UserData: Pointer; NumCols: integer; ColValues: PPAnsiCharArray; ColNames: PPAnsiCharArray): integer;
begin
  beep;
end;


//PS: da das ne Funktion ist, musst du vermutlich irgend einen bestimmten Wert zurückgeben. Frag mich aber nicht welchen ;)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)

Für diesen Beitrag haben gedankt: dontello
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Fr 11.03.11 12:45 
Die Funktion ist doch aber schon in der sqlite3.pas definiert oder versteh ich jetzt was falsch?

ausblenden Quelltext
1:
2:
3:
4:
type
    TSQLiteExecCallback = function(UserData: Pointer; NumCols: integer; ColValues:
    PPAnsiCharArray; ColNames: PPAnsiCharArray): integer; cdecl;
  TSQLiteBusyHandlerCallback = function(UserData: Pointer; P2: integer): integer; cdecl;



ausblenden Quelltext
1:
function SQLite3_Exec(db: TSQLiteDB; SQLStatement: PAnsiChar; CallbackPtr: TSQLiteExecCallback; UserData: Pointer; var ErrMsg: PAnsiChar): integer; cdecl; external SQLiteDLL name 'sqlite3_exec';					


:? :?:
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 11.03.11 12:55 
Nee, das ist nur die Definition, wie die Funktion auszusehen hat. cdecl hat übrigens nur was mit der Parameterübergabe an die dll zu tun.

Der Sinn ist es, dass du einen "Ansprechpartner" mitlieferst, den die dll dann aufrufen kann.

Ob das alles natürlich wirklich so ist, kann ich nicht sagen, bin kein Vollprofi was SQLite angeht (genau genommen hab ich erst ein kleines Projekt damit gemacht). Auf jeden Fall definiert der Typ nur, wie die Funktion auszusehen hat, die Funktion selbst musst du mit übergeben. Wäre vielleicht am besten, du guckst dir mal den Source-Code der entsprechenden Klassen an, wie die das aufrufen.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Fr 11.03.11 13:02 
ok ich werd mal schauen. ist das denn überhuapt der richtige weg um einen select zu machen?
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 11.03.11 13:07 
Gute Frage. Warum nimmst du nicht einfach die Table?

Der normale Select sieht so aus:

user profile icondontello hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Delphi-Quelltext
1:
sltb := slDb.GetTable('SELECT * FROM testtabelle');					


_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Fr 11.03.11 13:09 
Ich möchte halt eigentlich nicht mit externen Wrappern arbeiten.

Bei dem Insert Befehl bekomme ich ja komischerweise auch keine Probleme. :?
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 11.03.11 13:15 
Na ein Insert ist ja banal. Am Ende wird nur der SQL-String einfach rübergereicht.

Select ist knifflig. Denn die Datenbank reicht dir nicht die ganze Tabelle rüber (man stelle sich den Aufwand bei 100.000 Einträgen vor). Du kriegst bestenfalls einen Wert, und dann musst du den Durchschalten (deswegen auch sltb.Next) (Cursor-Prinzip). Keine Ahnung wie schwer das dann wird.

Auf jeden Fall ist der Wrapper ja genau dafür da, dass du ihn benutzt und nicht alles selbst machen musst. :D

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Fr 11.03.11 13:17 
Habe ich denn irgendwelche Einschränkungen wenn ich denn Wrapper benutze? Setzt der alle SQLite Funktionen um?
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 11.03.11 13:22 
Gute Frage. Ich denke aber schon. SQL-Befehle werden einfach durchgereicht, da sollte es keine Probleme geben. Der Select ist ja eingebaut...hmm, ansonsten fällt mir garnichts ein, was es noch gibt...Trigger vielleicht. Keine Ahnung ob die gehen, ich vermute es aber.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
dontello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2



BeitragVerfasst: Fr 11.03.11 14:08 
Hast du vielleicht eine Idee, warum ich, wenn ich mir sqlite_version() ausgeben lasse, die 3.6.14 angezeigt bekomme?
Habe jedoch die neueste dll von sqlite.org runtergeladen und eingebunden.