Hallo Roland,
ich setze die X2.1a in einem größeren produktiven Projekt (ca. 10000 Zeile Quelltext) seit einem halben Jahr recht erfolgreich ein.
Jetzt ist es bei einem Kunden zu einem schwer erklärbaren Programmabsturz gekommen. Die Fehlersuche hat mich zwei Tage meines Lebens gekostet.
Ich wollte es zuerst nicht glauben - ein einfaches select Statement hat die Runtime reproduzierbar in den Abgrund gerissen. Letztlich war für den Absturz der Inhalt der SQL Tabelle maßgeblich. Nur, wenn eine bestimmte Spalte ([RequestingPhysician] [varchar](100)) mit genau 100 Zeichen gefüllt ist, kommt es zu Crash. Das ganze ist recht kurios. Macht man die Spalte 101 Zeichen breit und füllt Sie mit 101 Zeichen ist alles i.O.
Es passiert bisher nur in genau dieser Konstellation. Nimmt man einen Buchstaben aus dem String: 'TESTTESTTEST und Kollegen^^^Gemeinschaftspraxis^Dres. med., TESTTESTTESTTEST UND KOLLEGEN^^^GEMEINSC' raus, funktioniert alles. Auch die Art der Ausgabe (0,1,2) ist egal. Die sql.dat wird noch geschrieben.
Ein entsprechendes Testprogramm zu schreiben das eine Tabelle anlegt, mit einem Datensatz befüllt und das fehlerhafte Verhalten zeigt hat mich einige graue Haare gekostet, aber es scheint vollbracht.
print SQLInit("Driver={SQL Server};Server=ragnar12\\dicomPACS;UID=sa;PWD=rr18057;Database=ORdicomDB;")
'sqlexec "drop table test",0
sqlexec "CREATE TABLE [dbo].[test]( [autoincrement] [int] NULL, [STUDYDATE] [char](8) NULL, [StudyTime] [varchar](6) NULL," + \ "[MODALITY] [varchar](16) NULL, [STUDYDESC] [varchar](64) NULL, [ACCESSIONUMBER] [varchar](16) NULL," + \ "[PATID] [varchar](64) NULL, [PATNAME] [varchar](64) NULL, [NACHNAME] [varchar](64) NULL," + \ "[VORNAME] [varchar](64) NULL,[PATBIRTHDATE] [char](8) NULL,[PATSEX] [char](1) NULL,[STATUS] [char](1) NULL," + \ "[INFO1] [varchar](16) NULL,[Station] [varchar](64) NULL,[STUDYINSTANCEUID] [varchar](80) NULL," + \ "[STUDYID] [varchar](64) NULL,[RequestingPhysician] [varchar](100) NULL,[received_from] [varchar](16) NULL," + \ "[received_status] [varchar](25) NULL,[import_filename] [varchar](255) NULL,[compress_status] [tinyint] NULL," + \ "[copy2backup_status] [tinyint] NULL,[primary_patid] [varchar](64) NULL,[secondary_padid] [varchar](64) NULL," + \ "[AddValuesDB] [varchar](255) NULL,[studypath] [varchar](255) NULL,[G0008E0070] [varchar](100) NULL," + \ "[G0008E1030] [varchar](100) NULL,[NumberOfImages] [int] NULL)",0
sqlexec "INSERT INTO [dbo].[test] ([autoincrement],[STUDYDATE],[StudyTime],[MODALITY],[STUDYDESC],[ACCESSIONUMBER],[PATID],[PATNAME]" + \ ",[NACHNAME],[VORNAME],[PATBIRTHDATE],[PATSEX],[STATUS],[INFO1],[Station],[STUDYINSTANCEUID],[STUDYID]" + \ ",[RequestingPhysician],[received_from],[received_status],[import_filename],[compress_status]" + \ ",[copy2backup_status],[primary_patid],[secondary_padid],[AddValuesDB],[studypath],[G0008E0070]" + \ ",[G0008E1030],[NumberOfImages])" + \ "VALUES" + \ "(8023,'20131206','1657','MR','WIRBELSÄULE^GANZE WS ISO,t2_tirm_sag_schnell'," + \ "'U-ID71111', '398222', 'Testmann^Maus', 'Testmann', 'Maus'," + \ "'20001001', 'M','', 'TESTTESTTEST U', '', '1.2.276.1.37.1.5.199907.783887'," + \ "'693464','TESTTESTTEST und Kollegen^^^Gemeinschaftspraxis^Dres. med., TESTTESTTESTTEST UND KOLLEGEN^^^GEMEINSC'," + \ "'incoming port :','','','','','','', 'ORdicomDB', '',' SIEMENS','WIRBELSÄULE^GANZE WS ISO', '6')",0
sqlexec "select * from test",1
print &sqlcount;listbox$("",1)
Wie im Quelltext sichtbar benutze ich den MS-SQL Server.
Ältere Runtimes (mit Version 9 und 10 getestet) zeigen diesen Fehler nicht.
Frohes Weihnachtsfest
Ragnar :santa: