AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie langsam ist Firebird über Internet wirklich?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie langsam ist Firebird über Internet wirklich?

Ein Thema von alleinherrscher · begonnen am 11. Jul 2012 · letzter Beitrag vom 6. Aug 2012
 
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#27

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 6. Aug 2012, 10:35
Hallo nochmals. Haben das Problem jetzt mit Stored Procedures gelöst und die sind in der Tat wunderbar schnell, so dass ich nun mit der Geschwindigkeit meines Programms sehr zufrieden bin.

Problem: Ich habe das Abrufen der E-Mails in einem Thread ausgelagert. Innerhalb des Threads wird daher auch die folgende Funktion(s.u.)aufgerufen, die die Datenbank abfragen muss. Es kommt an der Stelle "IsEMailInDBQuery.Transaction:=ta;" zur AccessViolation - aber erst beim zweiten Aufrufen der Funktion.
Zusätzliche Informationen:
- Das Problem taucht nur auf, wenn das Programm mit einer DelphiXE2 Version innerhalb einer VirtualBox gedebugt wird.
- Das Object TDatabaseConnection befindet sich nicht innerhalb des Threads. Ich habe die Funktion IsEMailInDB daher testweise per Synchronize aufgerufen, was aber nichts an der AV ändert.


Delphi-Quellcode:
function TDataBaseConnection.IsEMailInDB_All(aEmailList:EMailList):IsEMailInDB_result;
var i:integer;
    str:string;
    ta: TIBTransaction;
begin

 ta:=TIBTransaction.Create(nil);
 ta.DefaultDatabase:=DB;

if not assigned(IsEMailInDBQuery) then
 begin
   IsEMailInDBQuery:=TIBQuery.Create(nil);
   IsEMailInDBQuery.Database:=DB;

   IsEMailInDBQuery.SQL.Text := 'SELECT * FROM IS_EMAIL_IN_DB(:STR)';
   IsEmailINDBQuery.Prepare;
 end;

 IsEMailInDBQuery.Transaction:=ta;

 str:='';
 for i := 0 to length(aEMailList)-1 do
     str:=str+inttostr(aEMailList[i].customerid)+','+datetimetostr(aEMailList[i].EmailDate)+',';

 str:=copy(str,1,length(str)-1);

 IsEMailInDBQuery.Params[0].AsString:=str;
 IsEMailInDBQuery.open;

 str := IsEMailinDBQuery.Fields[0].AsString;
 setlength(result,length(str));
 for i := 0 to length(str)-1 do
   result[i]:=(str[i+1]<>'0');

 IsEMailInDBQuery.Close;
 ta.free;
end;
Hat jemand eine Idee?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS

Geändert von alleinherrscher ( 6. Aug 2012 um 10:37 Uhr)
  Mit Zitat antworten Zitat
 


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 22:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz