Avatar billede ser Nybegynder
16. april 2009 - 11:31 Der er 7 kommentarer og
1 løsning

Ændring af hvordan datetime gemmes i databasen

Jeg har to UK W2K3 servere, med hver sin MS SQL database. De to databaser er også ens. Imidlertid gemmes variabler af typen datetime forskelligt på de to databaser, henholdsvis YYYY-MM-DD  og DD-MM-YYYY, dette forhold gør at jeg skal anvende forskellig VB kode ved opdateringer af de to databaser

f.eks 
SQL = "insert into tabel ( dato )Values ('"+datovariabel+"')

Her skal datovariablen være formateret forskelligt afhengig af hvilken af de to databaser der er tale om  :(

Hvordan sætter jeg den ene database op så den gemmer datetime på samme format som den anden ?
Avatar billede aaberg Nybegynder
16. april 2009 - 11:52 #1
Grunden til dit problem er, er at du først konverterer din datetime til en string, og i databasen konverterer den tilbage til en datetime. Hvis du lader være med dette, får du ikke dette problem.

Brug parametre for at opnå dette. Dokumentationen finder du her:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx

Et lille eksempel:

myCommand.CommandText = "insert into (dato) values (@datoParam)";

myCommand.Parameters.AddWithValue("@dato", datovariabel);
Avatar billede aaberg Nybegynder
16. april 2009 - 11:53 #2
Der var en lille fejl i mit eksempel. Det skal være sådan:
myCommand.CommandText = "insert into (dato) values (@datoParam)";

myCommand.Parameters.AddWithValue("@datoParam", datovariabel);
Avatar billede ser Nybegynder
16. april 2009 - 15:51 #3
Hej aaberg_cc

Tak for dit svar, jeg kan godt se at du har fat i noget rigtigt. Jeg kan dog ikke få det til at virke. muligvis fordi jeg anvender VB 6, jeg kan ikke finde en syntaks her som muliggør brug af parametre :(
Avatar billede wagner Nybegynder
16. april 2009 - 23:18 #4
Er dato indstillingerne på serveren ens? Prøv at kigge efter i kontrolpanelet.

Derudover skal du benytte parametre som aaberg_cc foreslår.

Wagner
Avatar billede aaberg Nybegynder
17. april 2009 - 08:20 #5
VB6 er ikke min stærke side, så jeg kan desværre ikke vise dig syntaksen. Men jeg ved det kan lade sig gøre at bruge parametre fra VB6.
Avatar billede aaberg Nybegynder
17. april 2009 - 08:23 #6
Jeg googlede lidt, og fandt dette. Jeg tror det er til en Access database, men princippet skal være det samme til MSSQL. Se om du kan bruge det til noget:

Dim sQueryName As String
Dim rs As New ADODB.Recordset
Dim Com As New ADODB.Command
sQueryName = "STOCK_VIEW_G_TOTAL"
With Com
Set .ActiveConnection = Cnn
.CommandText = sQueryName
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("ENTER_ITEM_NAME", adVarChar, adParamInput, Len(CmbSType.Text), CmbSType.Text)
.Parameters.Append .CreateParameter("FINANCE_YEAR", adVarChar, adParamInput, Len(CStr(FNYear)), FNYear)
End With
set rs=com.excute

Koden kommer fra denne side:
http://bytes.com/topic/visual-basic/answers/542019-how-do-i-pass-parameters-vb6-query-ms-access
Avatar billede ser Nybegynder
24. april 2009 - 08:56 #7
Hej aaberg

Tak for dine meget "informerende" svar. Jeg har dog fortsat ikke kunne få det til at virke.  Jeg har valgt at løse problemet. v.h.a. vedhæftet programstump, som når programmet starter, finder ud af hvilket dato format den aktuelle database vil acceptere

 
-------
    On Error GoTo sqlDformat_err
      SQLDformat = "yyyy-mm-dd hh:mm:ss"
      Sql = "update SysChk set KsSMServer = '" + Format(Now, SQLDformat) + "' where  System= 'KSS Client'": Zsy.Open Sql, sConnect
exit sub
sqlDformat_err:
    SQLDformat = "dd-mm-yyyy hh:mm:ss"
    Resume Next
-------

SQLDformat, er en global variabel, som jeg så anvender i resten af min applikation når det er nødvendigt at angive et datoformat

Det er absoludt ikke en køn eller optimal løsning, men den virker :)

aaberg du har belyst problemstillingen, så gi et svar og du får point :)
Avatar billede aaberg Nybegynder
24. april 2009 - 10:06 #8
Jeg lægger et svar...

... men jeg kom lige på en anden måde at gøre det på, så du slipper for at have globale variabler liggende.

Du kan bruge SQL Serverens CONVERT() metode:
http://msdn.microsoft.com/en-us/library/ms187928.aspx

Herunder er et eksempel, som går ud fra at din VB applikation altid bruger formatet "yyyy.mm.dd"

Sql = "update tabel set datofelt = CONVERT(datetime, '" + datovariable + "', 102)"

CONVERT metoden kan konvertere en string til en datetime med det format du fortæller den skal bruge. I eksemplet angives 102 som format, ifølge dokumentationen jeg linker til, er formatet 102 ANSI: "yyyy.mm.dd".

At bruge parametre er stadig den bedste metode. Men får du ikke dette til at virke kan du bruge dette :-)

Bare spørg hvis jeg skal uddybe det mere.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester