kaffenils Skrevet 16. mars 2008 Del Skrevet 16. mars 2008 Hva om du oppretter en ny DateTime kolonne via Dataflex driveren og deretter sletter den og oppretter den på nytt som en kalkulert kolonne i SQL Server Management Studio. Samme kolonnenavn og samme datatype. Vil Visual Dataflex gå bananas da? Lenke til kommentar
cazber Skrevet 17. mars 2008 Forfatter Del Skrevet 17. mars 2008 Hva om du oppretter en ny DateTime kolonne via Dataflex driveren og deretter sletter den og oppretter den på nytt som en kalkulert kolonne i SQL Server Management Studio. Samme kolonnenavn og samme datatype. Vil Visual Dataflex gå bananas da? Problemet er at via Dataflex, så har vi ikke tilgang på en DateTime datatype. Kun dato, men når jeg tenker på det, så mapper jo en dato i dataflex, til en datetime i MSSQl server, så det skulle være mulig. Det største problemet vårt med diverse løsninger, er at de må være helautomatisert fra Dataflex pga antallet tabeller (ca 780) og installasjoner hos kunder. En slik løsning vil kreve enten manuell modifisering, eller så må vi bruke en del tid på å scripte dette i oppdateringsrutinene våre. Akkurat nå har vi dessverre ikke så mye tid til å ekperimentere med dette:) Lenke til kommentar
blackbrrd Skrevet 17. mars 2008 Del Skrevet 17. mars 2008 Har du sjekket om pervasivesql har støtte for indekser på computed columns da? Postgres og mssql server har det tydligvis, så hvorfor ikke pervasive? :o) Lenke til kommentar
cazber Skrevet 18. mars 2008 Forfatter Del Skrevet 18. mars 2008 Har du sjekket om pervasivesql har støtte for indekser på computed columns da? Postgres og mssql server har det tydligvis, så hvorfor ikke pervasive? :o) Nei. Har ikke fått sjekket dette enda, men denne endringen vil fortsatt medføre at vi må modifisere en god del steder. Vi er helt avhengige av at de modifiseringene som gjøres med databasen, gjøres via driveren til Dataflex (pga den lager egne filer for å aksessere tabellene), og driveren til Dataflex har i alle fall ikke støtte for det. Jeg tror hele konklusjonen på denne tråden blir et av 2 alternativer: Alternativ 1: Gjøre det slik jeg gjør i dag. Bruke Convert funksjonen til å konvertere Dato+time+minutt+sekund til en timestamp, og gjøre sammenlikningen på den. Dette gir svær uggen SQL, men det virker. Eksempel: SQL.Clear; SQL.Add('SELECT TOP 1 DBVNR,DATO,HH,MM,SS,STATUS,NAA_STAND FROM SPODATA WHERE '); SQL.Add('DBVNR=' + IntToStr(DbvnrHer) + ' AND '); SQL.Add('CONVERT((CONVERT(DATO,SQL_CHAR) + ' + Chr(39) + ' ' + chr(39) + ' + '); SQL.Add('RIGHT((' + chr(39) + '0' + chr(39) + ' + CONVERT(IF(HH>23,23,HH),SQL_CHAR)),2) + '); SQL.Add(chr(39) + ':' + chr(39) + ' + RIGHT((' + chr(39) + '0' + chr(39) + ' + CONVERT(IF(HH>23,59,MM),SQL_CHAR)),2) + '); SQL.Add(chr(39) + ':' + chr(39) + ' + RIGHT((' + chr(39) + '0' + chr(39) + ' + CONVERT(IF(HH>23,59,SS),SQL_CHAR)),2)),SQL_TIMESTAMP) <'); SQL.Add('CONVERT(' + sDato + ',SQL_TIMESTAMP) AND'); SQL.Add('STATUS=0 AND (SELECT KVALITET_NR FROM EMSTATUS WHERE NR = NAA_STATUS) >= 70 '); Sql.Add('ORDER BY DBVNR,DATO DESC, HH DESC, MM DESC, SS DESC, STATUS'); Alternativ 2: Lage en funksjon "Time" som brukes til å sette sammen dato+time minutt+sekund til en timestamp. Dette gir et penere, mer lesbart SQL statement, men ut fra tester på Pervasive.SQL, ikke så raskt. Vi kommer derfor til å kjøre med alternativ 1 så lenge. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå