Hallo
@Andreas:
Zitat von
Andreas:
...ohne Gewähr DisableControls und EnableControls des Grid (kann ich mir nie merken
mit Gewähr.
Es ist eine Verbesserung eingetreten, aber noch nicht gut genug. Habe jetzt das ganze DBGrid rausgenommen.
@Tbx:
Zitat von
Tbx:
ich würde auf gar keinen Fall ein Grid verwenden, ggf. ein DBText oder DBEdit, da kannst Du an der Änderung ja sehen, dass nochwas passiert.
DBGrid ist raus.
Zitat von
Tbx:
Was willst Du hier testen? Nur Testdatensätze erstellen für weitere Tests oder das Einfügen direkt testen? Wenn Du nur Testdatensätze generieren möchtest, solltest Du mal schauen, ob Du die Generierung nicht in eine Stored Procedure kapseln kannst. Schneller als direkt auf dem
DB-Server wirst Du keine Testdatenerstellung bekommen.
Es sind Testdatensätze um die Datenbank mit einer entsprechenden Anzahl Datensätze auszustatten für spätere Abfragen und einfügen von Datensätze.
Mit Stored Procedure weis ich nicht ob das geht. Als Messwerte werten zufällige Zahlen generiert, die sich aber zwischen 2 Grenzen bewegen sollen die usw.
Zitat von
Tbx:
bloß nicht jeden INSERT commiten. Bau Dir was ein, dass Du z.B. alle 500 INSERTS ein COMMIT machst, dann solltest Du eine annehmbare Geschwindigkeit haben
Ich habe das einfügen jetzt auf Insert umgestellt, die Transaktionskontrolle geht wohl automatisch, bin aber noch dabei das umzustellen. Habe den Timer herausgenommen und durch eine simple For-Schleife ersetzt.
Hier mal jetzt der Quellcode nach der Umstellung:
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
{
********************************************************************************
Datensätze in die Datenbank einfügen
********************************************************************************
}
procedure dbEinfügenSQL(const aMAArr: TArrMSRec;
var apFIBTransaction: TpFIBTransaction;
var aPFIBDataSet: TpFIBDataSet;
const aDatumUhrzeit: TDateTime;
const ai: Integer;
var abME: Boolean);
var
strText: String;
dbZahl: Double;
strSende: String;
z: Integer;
begin
for z := 0 to high(aMAArr) do
begin
strSende:= ZufallMSmitWert(aMAArr[z].FMAID,
aMAArr[z].FMWMinBereich,
aMAArr[z].FMWMaxBereich);
StrText:= copy (strSende,2,5); // Nur die ersten 5 Zeichen übernehmen.StrSende[1,3];
dbZahl:= strToFloat(copy(strSende,7,Length(strSende)-7));
if pos('M1',StrText)=0 then
begin
aPFIBDataSet.Insert;
aPFIBDataSet['MW_MSID']:= strText;
aPFIBDataSet['MW_MW']:= dbZahl;
apFIBDataSet['MW_DATUMUHRZEIT']:= aDatumUhrzeit;
end else
begin
if ai = 70 then
begin
aPFIBDataSet.insert;
aPFIBDataSet['MW_MSID']:= strText;
aPFIBDataSet['MW_MW']:= dbZahl;
apFIBDataSet['MW_DATUMUHRZEIT']:= aDatumUhrzeit;
abME:= TRUE;
end;
end;
end;
end;
////////////////////////////////////////////////////////////////////////////////
Insgesamt haben die Maßnahmen dafür gesorgt, dass ein Datensatz in ca. 1 sek angelegt wird. Ich werde aber versuchen das noch weiter zu verbessern. Das Testen ist nur sehr langwierig, weil man erst nach ca. 30.000 – 40.000 Datensätze feststellt, ob die Änderung was gebracht hat. Was auf jeden Fall stört ist die
BDS 2006, weil mit zunehmender Zeit immer mehr virtueller Speicher verbraucht wird, ohne dass man irgendetwas mit ihr macht.
Ich wollte noch ein Backup von der Datenbank-Datei machen, aber bisher ohne Erfolg.
Habe mir eine bat. – Datei geschrieben um ein Backup (mit gbak.exe) von der Datenbank zu bekommen, leider kommt immer eine Fehler-Meldung. Mit IBExpert ist mir auch noch kein Backup gelungen, weil immer eine
DLL-Datei, oder der Server-Name fehlt.
Zitat von
Andreas:
...und wie ist der Stand ?
Soweit ein Zwischenbericht, wie geschrieben ich werde noch weitere Optimierungen ausprobieren.
Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.