MSSQL - zmiana sposobu zapisu daty.

0

Łącząc się poprzez MSSQL Mangament Studio z serwerem MSSQL 2008 r2 do dnia "dzisiejszego" polecenie
update nazwa_tabeli set data='2013-03-13'
ustawiało date w tabeli na 13 marca 2013 roku
W dniu dzisiejszym dostaje komunikat

Msg 242, Level 16, State 3, Line 1
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
The statement has been terminated.
 

Problem dotyczy tylko połączenia zdalnego oraz każdego połączenia lokalnego po wcześniejszym uruchomieniu komendy zdalnie.
Podsumowując:

  1. Uruchamiam polecenie lokalnie. Wszystko jest ok.
  2. Uruchamiam polecenie zdalnie . otrzymuje ww błąd.
  3. Wracam na maszynę lokalną. Uruchamiam i dalej otrzymuje błąd.

Oba systemy Windows7 64bit.

0

Miałem podobne problemy kiedyś raz działało a raz nie. U mnie pomogło zadeklarowanie stałych formatów np daty które używamy w programie.

  {Wyłacz połaczenie system-aplikacja odnośnie zmian dokonywanych w Panelu Sterowania}
  Application.UpdateFormatSettings := False;

  {Ustaw własne formaty na których będzie pracować aplikacja}
  DateSeparator := '-';
  ShortDateFormat := 'dd-MM-yyyy';
  LongDateFormat := 'dd-MMMM-yyyy';
  ShortTimeFormat := 'hh:mm:ss';
  LongTimeFormat := 'hh:mm:ss';
  DecimalSeparator := ',';
  TimeSeparator := ':';

Pytanie też jaki konkretnie format przyjmuje serwer.
Komunikat który ty otrzymujesz to niepowodzenie zamienienia varchar na datetime

Możesz także nie wiem czy w mssgl-u ale w mysql tak jest że datę możesz podać w formie liczby typu integer np poleceniem: FROM_UNIXTIME()

0
Rafał D napisał(a):

Miałem podobne problemy kiedyś raz działało a raz nie. U mnie pomogło zadeklarowanie stałych formatów np daty które używamy w programie.

Ojojoj... to pewnie i zadziała, ale to jest taki drut że aż zęby bolą...
Naprawdę nigdy nie słyszałeś o parametrach w zapytaniach?

Rafał D napisał(a):
  {Wyłacz połaczenie system-aplikacja odnośnie zmian dokonywanych w Panelu Sterowania}
  Application.UpdateFormatSettings := False;

  {Ustaw własne formaty na których będzie pracować aplikacja}
  DateSeparator := '-';
  ShortDateFormat := 'dd-MM-yyyy';
  LongDateFormat := 'dd-MMMM-yyyy';
  ShortTimeFormat := 'hh:mm:ss';
  LongTimeFormat := 'hh:mm:ss';
  DecimalSeparator := ',';
  TimeSeparator := ':';

Można i tak, ale to się czkawką odbije - prędzej czy później.
Poza tym jest ogromna szansa że tak potraktowane zapytanie będzie działało po prostu wolno.

Pytanie też jaki konkretnie format przyjmuje serwer.
Komunikat który ty otrzymujesz to niepowodzenie zamienienia varchar na datetime
Możesz także nie wiem czy w mssgl-u ale w mysql tak jest że datę możesz podać w formie liczby typu integer np poleceniem: FROM_UNIXTIME()

To w ogóle nie ma znaczenia, gdyż poprawnie powinno robić się to tak (szkoda tylko, ze pytacz nie podał jakich komponentów używa, ale sądzę że ADO):

  //-- przygotowanie ADOCommand do przetwarzania zapytania; wykonywać tylko raz, przed pierwszym wykonaniem zapytania
  ADOCommand1.CommandText := 'update nazwa_tabeli set data = :data';
  ADOCommand1.Parameters.ParamByName('data').DataType := ftDateTime;
  ADOCommand1.Prepared := True;

  //-- Wykonanie zapytania - raz przygotowane zapytanie może być wielokrotnie wykonane, 
  //-- również w pętli gdzie przy każdej iteracji będzie inna wartość parametru
  ADOCommand1.Parameters.ParamByName('data')Value := Now;
  ADOCommand1.Execute;

1 użytkowników online, w tym zalogowanych: 0, gości: 1