Autor Beitrag
N3tw124rd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75


D5 Prof.
BeitragVerfasst: Fr 05.05.06 10:28 
Hi,

Ich habe eine Datenbank welche ziemlich groß ist und der Server ist nun mal auch relativ langsam.
Mein Problem ist das ich bei dem ExecSQL einen Fehler bekomme :

Fehler bei einem aus mehreren Schritten bestehenden OLE DB-Vorgang. Prüfen Sie die einzelnen DB-Statuswerte, falls vorhanden. Daten wurden nicht verarbeitet.

Bei den Selects die ich vorher gemacht habe benötigt er viel Zeit und der letzte Befehl (INSERT) funktioniert dann nicht.

MFG
N3tw124rd
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 05.05.06 10:34 
Das sind einfach zu wenig Infos, um dir zu dem Problem wirklich was sinnvolles sagen zu können.
Hast du dir die DB-Stati schon angesehen, falls möglich?
Langsame Select-Anweisungen können viele Ursachen haben.

Funktionierte das Ganze denn vorher oder ist das was neues?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 05.05.06 10:35 
Zitat:
Ich habe eine Datenbank welche ziemlich groß ist und der Server ist nun mal auch relativ langsam.
Die Größe einer Datenbank dürfte bei einem richtigen DBMS die Geschwindigkeit nicht beeintächtigen.
Welche DB?
Mit etwas Code wäre es einfacher.

[Edit: @jasocul man sollte ne Hupe einbauen ;-)]

_________________
Markus Kinzler.
N3tw124rd Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75


D5 Prof.
BeitragVerfasst: Fr 05.05.06 10:45 
Sorry,

bin heute morgen noch etwas verschlafen.
Die Datenbank ist eine MSDE 2000 d.h. die kostenlose version des MS SQL Servers.
Der Code sieht so aus :

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
  Result := TRUE;
 try
  qrACK.Close;
  qrACK.SQL.Text := 'INSERT INTO '+sTable+
  ' (VSYS_ID, ALM_TAGNAME, ALM_DATELAST, ALM_TIMELAST, alm_timeduration, '+
  'alm_dateend, alm_timeend, alm_tagdesc, alm_descr, alm_msgtype, alm_almstatus, '+
  'alm_almarea, alm_almpriority, alm_value, alm_unit, alm_datein, alm_timein, '+
  'alm_lognodename, alm_physlnode, alm_opname, alm_opnode, alm_almextfld1, alm_almextfld2, '+
  'alm_nativetimein, alm_nativetimelast, alm_opfullname, alm_perfname, alm_perffullname, '+
  'alm_perfbycomment, alm_vername, alm_verfullname, alm_verbycomment, alm_msgid, alm_userfld1, '+
  'alm_userfld2, alm_userfld3, alm_userfld4'+
  ')VALUES('+
  ':sys, :tag, :datl, :timl, :dur, :date, :time, :tagd, :desc, :msgt, :alms, '+
  ':alma, :almp, :valu, :unit, :dati, :timi, :logn, :phys, :opna, :opno, '+
  ':ext1, :ext2, :natin, :natla, :opful, :perfn, :perff, :perfb, :vern, :verf, '+
  ':verb, :msgi, :user1, :user2, :user3, :user4)';
  qrACK.Parameters.ParamByName( 'sys' ).Value   := frmAlarmsAndMessages.GetSystemTime;
  qrACK.Parameters.ParamByName( 'tag' ).Value   := rec.sAlm_TagName;
  qrACK.Parameters.ParamByName( 'datl' ).Value  := rec.sAlm_DateLast;
  qrACK.Parameters.ParamByName( 'timl' ).Value  := rec.sAlm_TimeLast;
  qrACK.Parameters.ParamByName( 'dur' ).Value   := rec.sAlm_TimeDuration;
  qrACK.Parameters.ParamByName( 'date' ).Value  := rec.sAlm_DateEnd;
  qrACK.Parameters.ParamByName( 'time' ).Value  := rec.sAlm_TimeEnd;
  qrACK.Parameters.ParamByName( 'tagd' ).Value  := rec.sAlm_TagDesc;
  qrACK.Parameters.ParamByName( 'desc' ).Value  := rec.sAlm_Descr;
  qrACK.Parameters.ParamByName( 'msgt' ).Value  := rec.sAlm_MsgType;
  qrACK.Parameters.ParamByName( 'alms' ).Value  := rec.sAlm_AlmStatus;
  qrACK.Parameters.ParamByName( 'alma' ).Value  := rec.sAlm_AlmArea;
  qrACK.Parameters.ParamByName( 'almp' ).Value  := rec.sAlm_AlmPriority;
  qrACK.Parameters.ParamByName( 'valu' ).Value  := rec.sAlm_Value;
  qrACK.Parameters.ParamByName( 'unit' ).Value  := rec.sAlm_Unit;
  qrACK.Parameters.ParamByName( 'dati' ).Value  := rec.sAlm_DateIn;
  qrACK.Parameters.ParamByName( 'timi' ).Value  := rec.sAlm_TimeIn;
  qrACK.Parameters.ParamByName( 'logn' ).Value  := rec.sAlm_LogNodeName;
  qrACK.Parameters.ParamByName( 'phys' ).Value  := rec.sAlm_PhyslNode;
  qrACK.Parameters.ParamByName( 'opna' ).Value  := rec.sAlm_OpName;
  qrACK.Parameters.ParamByName( 'opno' ).Value  := rec.sAlm_OpNode;
  qrACK.Parameters.ParamByName( 'ext1' ).Value  := rec.sAlm_AlmExtFld1;
  qrACK.Parameters.ParamByName( 'ext2' ).Value  := rec.sAlm_AlmExtFld2;
  qrACK.Parameters.ParamByName( 'natin' ).Value := rec.sAlm_NativeTimeIn;
  qrACK.Parameters.ParamByName( 'natla' ).Value := rec.sAlm_NativeTimeLast;
  qrACK.Parameters.ParamByName( 'opful' ).Value := rec.sAlm_OPFullName;
  qrACK.Parameters.ParamByName( 'perfn' ).Value := rec.sAlm_PerfName;
  qrACK.Parameters.ParamByName( 'perff' ).Value := rec.sAlm_PerfFullName;
  qrACK.Parameters.ParamByName( 'perfb' ).Value := rec.sAlm_PerfByComment;
  qrACK.Parameters.ParamByName( 'vern' ).Value  := rec.sAlm_VerName;
  qrACK.Parameters.ParamByName( 'verf' ).Value  := rec.sAlm_VerFullName;
  qrACK.Parameters.ParamByName( 'verb' ).Value  := rec.sAlm_VerByComment;
  qrACK.Parameters.ParamByName( 'msgi' ).Value  := rec.sAlm_MsgID;
  qrACK.Parameters.ParamByName( 'user1' ).Value := rec.sAlm_UserFld1;
  qrACK.Parameters.ParamByName( 'user2' ).Value := rec.sAlm_UserFld2;
  qrACK.Parameters.ParamByName( 'user3' ).Value := rec.sAlm_UserFld3;
  qrACK.Parameters.ParamByName( 'user4' ).Value := rec.sAlm_UserFld4;
  qrACK.ExecSQL;
 Except
  Result := FALSE;
 End;


Wie kann ich die DB Statis überprüfen habe nichts im Enterprise Manager gefunden.

THX
N3tw124rd

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 05.05.06 11:01 
Stimmen die Typen zwischen Parametr und rec.<x>?
Ist dieser Query in einem eigenen Transaktionskontext oder zusammen mit anderen Statements?

_________________
Markus Kinzler.
N3tw124rd Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75


D5 Prof.
BeitragVerfasst: Fr 05.05.06 11:07 
Hi,

die query hat keine TRansaktionskomponente angehängt und ist direkt mit der connection komponente auf die Datenbank gehängt.
Damit will ich sagen das keine transaktionen zwischen gepuffert sein sollten.
Das mache ich normalerweise immer so und hat auch seit ein paar Jahren schön funktioniert.
Die Typen stimmen, den bei den ados hast du nur value als wert und dies ist ein Variant, der Compiler guckt dann was er zugewiesen bekommen hat und castet dann gegebenenfalls.
So denke ich mir das auf jeden Fall mal.

THX
N3tw124rd
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 05.05.06 11:10 
Versuch doch mal diesen INSERT in eine eigene transaktion zu kapseln.

_________________
Markus Kinzler.
N3tw124rd Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75


D5 Prof.
BeitragVerfasst: Fr 05.05.06 11:14 
Ich habe jetzt mal neben bei die DB auf meinem Rechner installiert, welcher schneller
ist da habe ich das selbe Problem, es dauert aber ein wenig bis die Meldung kommt.
Ich werde mal eine query draufziehen die nur dieses Insert macht.

THX
N3tw124rd
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 05.05.06 11:17 
Ich glaube nicht, dass das Problem beim Insert-Statement liegt. (Was nichts heißen soll)
Das klingt mehr nach einem DB-Problem, bzw. Verbindungsproblem zur DB (OLE-DB-Fehler! s.o.).

Hast du schonmal versucht das Statement direkt auszuführen? Also nicht aus Delphi heraus, sondern mit einer DB-Oberfläche, die SQL-Statements verarbeiten kann?

@Markus: Trööt :zwinker: Ich habe fast das selbe gedacht.
N3tw124rd Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75


D5 Prof.
BeitragVerfasst: Fr 05.05.06 11:21 
Ich kann den Enterprise Manager verwenden aber der verwendet nicht ODBC, der schwingt sich
direkt drauf und ansonsten habe ich jetzt kein Tool, welches sich über ODBC draufschwingt um zu prüfen
ob der ODBC Defekt ist :(
Kennt ihr eines ?

THX
N3tw124rd
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 05.05.06 11:23 
Dann teste es doch erstmal ohne ODBC. Wenn es dann funktioniert, hast du zumindest den Fehlerbereich eingeschränkt. Wenn es nicht funktioniert natürlich auch.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 05.05.06 11:23 
Zitat:
Fehler bei einem aus mehreren Schritten bestehenden OLE DB-Vorgang.
Weist IMHO darauf hin, daß noch mehrere andere Vorgänge in der gleichen Transaktion ausgeführt wurden.

_________________
Markus Kinzler.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 05.05.06 11:26 
Bei OLE/ODBC bin ich mir nicht immer sicher, was da noch so alles passieren kann. Aber im Prinzip hast du schon Recht.
N3tw124rd Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75


D5 Prof.
BeitragVerfasst: Fr 05.05.06 11:31 
Ich denke das .Value ist Schuld ein Feld und zwar das "ALM_MSGID" ist ein Unique identifier.Das kommt aus Access und ist
so eine Art GUID da meckert er momentan das er das nicht konvertieren kann, weil ich über den Enterprise Manager alle Felder mit 1 füllen wollte.Das mit dem einem aus mehreren kommt daher das jedes .Value ja ein OLE Variant ist und dann von rec.sXXX in das DB Format konvertiert werden muss und beim Feld ALM_MSGID schlägt dies dann fehlt :(
Ich konvertier das Feld mal in was anderes und melde mich dann gleich nochmal.

THX
N3tw124rd
N3tw124rd Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75


D5 Prof.
BeitragVerfasst: Fr 05.05.06 11:33 
Den INSERT hat er mal gemacht...
Jetzt kommt die Applikation noch mal...
Ich bin ja gespannt ...
N3tw124rd Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75


D5 Prof.
BeitragVerfasst: Fr 05.05.06 11:38 
Das war des Fehlers Lösung :)
Die Datenbank konnte meinen String nicht in das GUID Format bringen deshalb hat sie gecancelt.
Ich denke mal mit der Fehlermeldung die ich vom Enterprise Manager bekommen habe wäre ich besser bedient gewessen
als mit der vom Delphi.
Vielen Dank Jungs jetzt kann ich endlich weitermachen.
Zur Lösung fürs Protokoll : Ich habe das Unique Feld nun in ein Varchar geändert, weil dies bei mir so nicht benötigt wird.

THX
N3tw124rd