Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse
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
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...