AGB  ·  Datenschutz  ·  Impressum  







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

Nextgrid und sqlite

Offene Frage von "michback"
Ein Thema von Cylence · begonnen am 3. Jul 2008 · letzter Beitrag vom 23. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Cylence
Cylence

Registriert seit: 2. Sep 2004
Ort: Allgäu
246 Beiträge
 
Delphi 7 Enterprise
 
#1

Nextgrid und sqlite

  Alt 3. Jul 2008, 14:27
Datenbank: SQLite • Zugriff über: ääähhh?? Hähhh?
Hi,

ich habe einen Player in dessen playliste sämtliche daten der Files eingelesen werden.
Also größe dauer titel artist id3tags codec usw ...
und im moment lädt das teil die daten bei jedem start neu rein, also checkt jede datei durch und liest die daten ein...was bei zb 40000 titeln auf einem 1000er P3 doch schon mal ein paar std dauert und was ja dann auch nich grad vorteilhaft is für die rechnerperformance und auch die lebensdauer der festplatte...

Nun hab ich das SQLite gefunden was ja ne coole sache is, keine weitere installationen usw...aber wie kann ich ohne großartiges umbauen des programmes...das nextgrid mit dem SQLite verbinden? Gibts da irgendeinen Trick mit dems ganz einfach geht?

Wär cool *g*

also ich will nur beim start die daten aus der datenbank ins grid laden und beim schliessen wieder aus dem grid in die datenbank speichern der rest der datenbankfunktionalitäten is unwichtig für mich. Ich habe auch schonmal das Nextgrid.savetofile und loadfromfile versucht und das ist auch ok wenn man max 1500 titel hat aber bei 40 000 dauert das laden dann 10 minuten... was nicht mehr brauchbar ist. Würde das laden aus der Datenbank überhaupt schneller gehen?

ich bräuchte quasi nur ne funktion SQLitetoGrid bzw GridtoSQLite gibts da was in der art?

Gruß

tom
Tom
Just DO it
  Mit Zitat antworten Zitat
Benutzerbild von holliesoft
holliesoft

Registriert seit: 4. Apr 2005
Ort: Gau-Algesheim
250 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Nextgrid und sqlite

  Alt 3. Jul 2008, 15:03
Zitat von Cylence:
Nun hab ich das SQLite gefunden was ja ne coole sache is, keine weitere installationen usw...aber wie kann ich ohne großartiges umbauen des programmes...das nextgrid mit dem SQLite verbinden? Gibts da irgendeinen Trick mit dems ganz einfach geht?
Hi,

das einfachste wäre die Verwendung vom DBNextGrid, welches sich mit TDataset-Komponenten (z.B. Zeos) einfach verbinden lässt.

Ich selbst verwende für meine Anwendungen das "normale" Nextgrid und eine Wrapperklasse zum Zugriff auf die SQLite-Datenbank. Die Datensätze füge ich manuell über TNextGrid.AddRow() hinzu.
Für das Hinzufügen von ~150000 Datensätzen (5 Spalten) benötigt eine Anwendung von mir ca. 5 Sekunden.

Zitat von Cylence:
ich bräuchte quasi nur ne funktion SQLitetoGrid bzw GridtoSQLite gibts da was in der art?
Ganz so bequem nicht, aber wie oben beschrieben, mit DBNextgrid und TDataset-Nachfahren geht es fast ohne zusätzlichen Code

Gruß,
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von Cylence
Cylence

Registriert seit: 2. Sep 2004
Ort: Allgäu
246 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Nextgrid und sqlite

  Alt 4. Jul 2008, 08:05
Hi,

ok ich wollte mir das jetzt mal anschaun, hab auch das Zeos runtergeladen wollte installieren und jetzt fehlt das ZCommon6.pas File, und ich hab alles von den ZEOS Files auf SourceForge runtergeladen aber das gibts nicht... irgendwie fehlt da was oder ich versteh da was falsch...

weißt du wos das gibt?

gruß

Tom
Tom
Just DO it
  Mit Zitat antworten Zitat
Benutzerbild von holliesoft
holliesoft

Registriert seit: 4. Apr 2005
Ort: Gau-Algesheim
250 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Nextgrid und sqlite

  Alt 4. Jul 2008, 08:44
Hallo,

hast Du alle Source-Verzeichnisse zum Suchpfad hinzugefügt?
Zudem ist die Version auf SF.net veraltet, aktuelle Versionen von Zeos findest Du unter http://zeos.firmos.at/portal.php

Schöne Grüße
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von Cylence
Cylence

Registriert seit: 2. Sep 2004
Ort: Allgäu
246 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Nextgrid und sqlite

  Alt 4. Jul 2008, 09:19
Hi,

ja so viele dateien sind in den Ordnern nicht ich hab geschaut ob die Common überhaupt da is, aber war nich dabei. OK aber Danke dann schau ich mir das jetzt mal von der Seite aus an Thanx

tom
Tom
Just DO it
  Mit Zitat antworten Zitat
Benutzerbild von Cylence
Cylence

Registriert seit: 2. Sep 2004
Ort: Allgäu
246 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Nextgrid und sqlite

  Alt 4. Jul 2008, 09:50
ok

also ich glaub ich kapiers nich... bin ja noch Anfänger was Datenbanken angeht.
Ich hab auch mehrere Demos wie man das SQLite anspricht usw aber von denen werd ich nciht schlau... Das sagt mir alles nicht wie ich das Nextgrid beim start aus der db befülle und beim beenden andersrum... ich weiß nicht wie ich das machen soll. Und mir fällt auf... das Hinzufügen von leeren Spalten ist nicht das Problem, das geht auch mit dem Nextgrid in nullkommanix, aber das einlesen eben das is das problem und NUR das, selbst beim Schliessen waren bei 40 000 titeln nur einige sekunden nötig ist also ok. Würde das denn wenn ich es irgendwann mal hinbekomme, denn überhaupt schneller sein beim laden?

ok hab mal n test gemacht:

Delphi-Quellcode:
var
   i : Integer;
   slDBpath: string;
   sldb: TSQLiteDatabase;
   sltb: TSQLIteTable;
   sSQL: String;
   Notes: String;
begin
     slDBPath := PrgPfad + 'config\Playlist1.db';
     sldb := TSQLiteDatabase.Create(slDBPath);
     if sldb.TableExists('Playlist1') then begin
        sSQL := 'DROP TABLE Playlist1';
        sldb.execsql(sSQL);
     end;
     sSQL := 'CREATE TABLE Playlist1 ([ID] INTEGER PRIMARY KEY,[Nr] INTEGER NULL,';
     
          sSQL := sSQL + '[AV] FLOAT, [Nr] FLOAT, [Title] VARCHAR (255),[Path] VARCHAR (255),[Genre] VARCHAR (255),[Medium] VARCHAR (255)'+
                                                                                                                                    //[picture] BLOB COLLATE NOCASE,
           ' [Quality] VARCHAR (255),[Rate] VARCHAR (255),[Artist] VARCHAR (255),[Album] VARCHAR (255),[Duration] VARCHAR (255), '+
           '[Invalid] VARCHAR (255),[InfosLoaded] VARCHAR (255),[VideoPosition] VARCHAR (255),[Filedate] VARCHAR (255),[Title] VARCHAR (255),[Resolution] VARCHAR (255), '+
           '[LastUse] VARCHAR (255),[FileSize] VARCHAR (255),[VideoDelay] VARCHAR (255),[PlayCount] VARCHAR (255),[Memo] BLOB,);';
         sldb.execsql(sSQL);
         sldb.execsql('CREATE INDEX Playliste ON [Playlist1]([Name]);');
         //begin a transaction
         sldb.BeginTransaction;
         for i := 0 to JvPlaylist1.RowCount -1 do begin //,picture
             sSQL := 'INSERT INTO Playlist1(AV,Nr,Title,Path,Genre,Medium,Quality,Rate,Artist,Album,Duration,Invalid, '+
                     'InfosLoaded,VideoPosition,Filedate,Title,Resolution,LastUse,FileSize,VideoDelay,PlayCount,Memo) '+
                     'VALUES ('+JvPlaylist1.Cell[0,i].AsString +
                               JvPlaylist1.Cell[1,i].AsString +
                               JvPlaylist1.Cell[2,i].AsString +
                               JvPlaylist1.Cell[3,i].AsString +
                               JvPlaylist1.Cell[4,i].AsString +
                               JvPlaylist1.Cell[5,i].AsString +
                               JvPlaylist1.Cell[6,i].AsString +
                               JvPlaylist1.Cell[7,i].AsString +
                               JvPlaylist1.Cell[8,i].AsString +
                               JvPlaylist1.Cell[9,i].AsString +
                               JvPlaylist1.Cell[10,i].AsString +
                               //JvPlaylist1.Cell[11,i].AsString +
                               JvPlaylist1.Cell[12,i].AsString +
                               JvPlaylist1.Cell[13,i].AsString +
                               JvPlaylist1.Cell[14,i].AsString +
                               JvPlaylist1.Cell[15,i].AsString +
                               JvPlaylist1.Cell[16,i].AsString +
                               JvPlaylist1.Cell[17,i].AsString +
                               JvPlaylist1.Cell[18,i].AsString +
                               JvPlaylist1.Cell[19,i].AsString +
                               JvPlaylist1.Cell[20,i].AsString +
                               JvPlaylist1.Cell[21,i].AsString +'");';
             //do the insert
             sldb.ExecSQL(sSQL);
         end;
       sldb.Commit;
       sldb.Free;
seh ich das ungefähr richtig so? Die db datei wird erstellt das klappt aber is null bytes groß... und es kommt kein Fehler im Debugger? Was is da falsch?

Gruß

tom
Tom
Just DO it
  Mit Zitat antworten Zitat
Benutzerbild von Cylence
Cylence

Registriert seit: 2. Sep 2004
Ort: Allgäu
246 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Nextgrid und sqlite

  Alt 4. Jul 2008, 12:13
ok

ich habs jetzt mal soweit das er brav gespeichert hat

Delphi-Quellcode:

         slDBPath := PrgPfad + 'config\Playlist1.db';
         sldb := TSQLiteDatabase.Create(slDBPath);
         if sldb.TableExists('Playlist1') then begin
            sSQL := 'DROP TABLE Playlist1';
            sldb.execsql(sSQL);
         end;
         sSQL := 'CREATE TABLE Playlist1 ([ID] INTEGER PRIMARY KEY,[otherID] INTEGER NULL,';
         sSQL := sSQL + '[AV] FLOAT, [Number] FLOAT, [Title] VARCHAR (255),[Path] VARCHAR (255),[Genre] VARCHAR (255),[Medium] VARCHAR (255),'+
           ' [Quality] VARCHAR (255),[Rate] VARCHAR (255),[Artist] VARCHAR (255),[Album] VARCHAR (255),[Duration] VARCHAR (255), '+ //[picture] BLOB COLLATE NOCASE,
           '[Invalid] VARCHAR (255),[InfosLoaded] VARCHAR (255),[VideoPosition] VARCHAR (255),[Filedate] VARCHAR (255),[Resolution] VARCHAR (255), '+
           '[LastUse] VARCHAR (255),[FileSize] VARCHAR (255),[VideoDelay] VARCHAR (255),[PlayCount] VARCHAR (255),[Memo] BLOB);';
         sldb.execsql(sSQL);
         sldb.execsql('CREATE INDEX Playliste ON [Playlist1]([Path]);');
         sldb.BeginTransaction;
         for i := 0 to JvPlaylist1.RowCount -1 do begin //,picture
            sSQL := 'INSERT INTO Playlist1(otherID,AV,Number,Title,Path,Genre,Medium,Quality,Rate,Artist,Album,Duration,Invalid, '+
                    'InfosLoaded,VideoPosition,Filedate,Resolution,LastUse,FileSize,VideoDelay,PlayCount,Memo) '+
                    'VALUES ("'+JvPlaylist1.Cell[0,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[1,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[1,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[2,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[3,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[4,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[5,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[6,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[7,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[8,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[9,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[10,i].AsString +'"'+ ','+
                         //'"'+JvPlaylist1.Cell[11,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[12,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[13,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[14,i].AsString + ' "'+ ','+
                           '"'+JvPlaylist1.Cell[15,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[16,i].AsString + ' "'+ ','+
                           '"'+JvPlaylist1.Cell[17,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[18,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[19,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[20,i].AsString + '"'+ ','+
                           '"'+JvPlaylist1.Cell[21,i].AsString +'"'+');';
             sldb.ExecSQL(sSQL);
         end;
       sldb.Commit;
       sldb.Free;
jetzt mach ich mich mal ans laden von dem ganzen und test dann ob das ganze schneller ist als Nextgrid.savetofile/ bzw loadfromfile

Gruß

tom
Tom
Just DO it
  Mit Zitat antworten Zitat
Benutzerbild von Cylence
Cylence

Registriert seit: 2. Sep 2004
Ort: Allgäu
246 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Nextgrid und sqlite

  Alt 5. Jul 2008, 07:08
Hi,

jetzt klappts *g* das laden von 2 datenbanken mit 43000 Titeln(inklusive 21 Spalten MedienInfos) zusammen dauert auf einem P4 2000 7 Sekunden und auf einem P3 1000 bischen länger ca 50 Sekunden. Aber gegenüber 10 MINUTEN MIT Nextgrid.Loadfromfile ist das schon OK denk ich *g* ich schau mal ob ich nun so eine NextgridtoSQLite Funktion zusammenbaun kann und poste die dann (falls ichs hinkrieg *g*) denke das interessiert auch andere...

Wünsch euch ein schönes Wochenende

Gruß

Tom
Tom
Just DO it
  Mit Zitat antworten Zitat
Benutzerbild von Cylence
Cylence

Registriert seit: 2. Sep 2004
Ort: Allgäu
246 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Nextgrid und sqlite

  Alt 7. Jul 2008, 08:55
Hi,

was für eine Wrapperklasse verwendest du zur Verbindung zum Nextgrid?

Gruß

tom
Tom
Just DO it
  Mit Zitat antworten Zitat
Benutzerbild von holliesoft
holliesoft

Registriert seit: 4. Apr 2005
Ort: Gau-Algesheim
250 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Nextgrid und sqlite

  Alt 7. Jul 2008, 11:40
Hi,

ich benutze folgenden Wrapper:

http://www.itwriting.com/blog/a-simp...r-for-sqlite-3

Ist zwar einiges an Tipparbeit notwendig, um die Datensätze zum Nextgrid hinzuzufügen, aber ich finde dass es recht schnell geht

Aber... beim Nextgrid ist doch das DBNextgrid dabei. Damit ist das Befüllen des Grids doch noch einfacher und performanter. Einfach mit der Datenquelle (Zeos-Komponenten) verbinden und Du hast automatisch Deine abgefragte Tabelle im Grid.

Gruß,
Patrick
  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 03:13 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