Marne si lamu hlavu, jak prenesu data za stare verze (source) do nove verze (destination). Indexi jsou rodne cislo a datum.
Mam tabulky:
Dekurs, ktera obsahuje sloupce:
Pacient, datum, subj, obj, vaha, vyska atd....
Mam napsane klasicke SQL Query takto:
- Kód: Vybrat vše
SELECT *
FROM DEKURS
WHERE (Pacient LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]%')
AND (DATEVALUE(Datum) LIKE '[1-3][0-9].[1][0-9].[1-2][0-9][0-9][0-9]'
OR
DATEVALUE(Datum) LIKE '[1-9].[1][0-9].[1-2][0-9][0-9][0-9]'
OR
DATEVALUE(Datum) LIKE '[1-3][0-9].[1-9].[1-2][0-9][0-9][0-9]'
OR
DATEVALUE(Datum) LIKE '[1-9].[1-9].[1-2][0-9][0-9][0-9]')
AND (Datum IS NOT NULL) AND (Pacient IS NOT NULL)
a zacinam si prevadet polozku po polozce:
Pacient je pravaden takto:
- Kód: Vybrat vše
' Copy each source column to the destination column
Function Main()
IF Len( DTSSource("Pacient" )) <= 6 THEN DTSDestination("Rodne") = DTSSource("Pacient") END IF
IF Len( DTSSource("Pacient" )) >= 7 THEN DTSDestination("Rodne") = Left( DTSSource("Pacient") , 6 ) + Right( DTSSource("Pacient") , Len( DTSSource("Pacient") ) - 7 ) END IF
Main = DTSTransformStat_OK
End Function
Datum prevadim takto:
- Kód: Vybrat vše
' Copy each source column to the destination column
Function Main()
IF ISNULL (DTSSource("Datum")) THEN DTSDestination("Datum") = "1.1.1900" & DTSGlobalVariables("Time").Value & DTSGlobalVariables("Sekunda").Value END IF
IF NOT ISNULL (DTSSource("Datum")) THEN DTSDestination("Datum") = DTSSource("Datum") & DTSGlobalVariables("Time").Value & DTSGlobalVariables("Sekunda").Value END IF
IF DTSGlobalVariables("Sekunda").Value < 60 THEN DTSGlobalVariables("Sekunda").Value = DTSGlobalVariables("Sekunda").Value +1 END IF
IF DTSGlobalVariables("Sekunda").Value = 60 THEN DTSGlobalVariables("Sekunda").Value =10 END IF
Main = DTSTransformStat_OK
End Function
Subjektivne:
- Kód: Vybrat vše
Function Main()
DTSDestination("Subj") = DTSSource("Subj")
Main = DTSTransformStat_OK
End Function
Objektivne:
- Kód: Vybrat vše
Copy Column
Problem je ten, ze potrebuji dostat do Dekursu, presneji subjektivni casti onen text, ktery je zacina jinym dlouhym textem, pote nasleduje obsah pole subjektivni a toto pole je zakonceno jeste dalsim dlouhym textem.
Pri testu v ramci MSSQL Ent. Managera mi toto probehne zcela korektne, ale pri prohlednuti obsahu tabulky jsou pole subj NULL.
Problem je, ze si nedokazi napsat ActiveX ve VBS nebo i Jave prevodnik, ktery mi tohle udela a soucane umi pracovat s takto dlouhym polem. Pokazde, kdyz si napisu jednoduchy scriptik takto:
Vloz ZACATEK a za to si nakopiruj OBSAH SUBJ a za to vloz KONEC, kdy mam jak ZACATEK tak i KONEC dva "dlouhe texty", ktere jsou porad stejne, mi vyhodi chybu, jelikoz to nedokaze.
Spatne je to, ze nemohu si vytvorit dalsi docasnou tabulku, do ktere si to naskladam a pote si to vyberu, nebot se toto bude provadet u klientu a nezle na MSDE toto provect. Druhym oriskem je i zkutecnoct, ze se ve stejne dobe provadi dalsich X prevodu a toto musi jit soubezne.
Napada me zkusit vlozit do dotazu dalsi dotaz, coz v praxi nemusi fungovat. JS/VBS je omezeny a nemohu jit pres funkce, ktere nejsou soucasti, stejne jako nemohu jit externe, protoze tato cast je jen jedna z mnohe podpolozek celkoveho scriptu prevodu dat. Druha vec, ktera velmi omezuje je fakt, ze stara DB je Paradoxacka.
Nenasel by se nekdo, kdo by vedel, jak dostanu pred libovolne dlouhy text dalsi libovolny text pred a za ?
Diky
Edit:
UPDATE .... atd mi funguje vsude jinde, nez v MSSQL