Страница 1 из 1
Вставка записи в БД Галактики из Делфи
Добавлено: 20 сен 2004, 11:15
snoopy
При вставке записи в БД Галактики из Делфи, происходит ошибка с полем типа data (конкретно поле dsopr). В каком формате подсовывать дату в запрос?
Пробовал: 20.09.2004, 20/09/2004
Очень нужно!!!
Re: Вставка записи в БД Галактики из Делфи
Добавлено: 20 сен 2004, 20:24
WiRuc
В виде целого числа
Re: Вставка записи в БД Галактики из Делфи
Добавлено: 21 сен 2004, 10:44
mik
ниже user-defined function для SQL сервера
в делфи их переделать можно без проблем:
это для даты:
дата в галактиканскую дату:
CREATE FUNCTION Date2Strange (@Date smalldatetime)
RETURNS int AS
BEGIN
RETURN ((YEAR(@Date)*256)+MONTH(@Date))*256+DAY(@Date)
END
обратное преобразование:
CREATE FUNCTION Strange2Date (@Strange int)
RETURNS smalldatetime AS
BEGIN
DECLARE @D int, @M int, @Y int
DECLARE @DateString char(8)
IF @Strange = 0
RETURN CONVERT(smalldatetime, '19000101', 112)
SET @D=@Strange%256
SET @M=Ceiling(@Strange/256)%256
SET @Y=Ceiling(Ceiling(@Strange/256)/256)
SET @DateString=STR(@Y, 4, 0)+
RIGHT('0'+LTRIM(STR(@M, 2, 0)),2)+
RIGHT('0'+LTRIM(STR(@D, 2, 0)),2)
RETURN CONVERT(smalldatetime, @DateString, 112)
END
Это для времени:
CREATE FUNCTION Strange2Time(@Strange int)
RETURNS char(5) AS
BEGIN
DECLARE @Hours int, @Minutes int
DECLARE @TimeString char(5)
IF @Strange = 0
RETURN ''
SET @Minutes = (@Strange/65536)%256
SET @Hours = Ceiling((@Strange/65536)/256)
SET @TimeString = Right('0' + LTrim(STR(@Hours, 2, 0)), 2) + ':' +
Right('0' + LTrim(STR(@Minutes, 2, 0)), 2)
RETURN @TimeString
END
CREATE FUNCTION Time2Strange (@Time char(5))
RETURNS int AS
BEGIN
DECLARE @Hours int, @Minutes int
SET @Hours = Cast(Left(@Time, 2) As int)
SET @Minutes = Cast(Right(@Time, 2) As int)
RETURN (@Hours * 256 + @Minutes) * 65536
END
Если кто знает лучший способ, интересно было бы узнать.
Re: Вставка записи в БД Галактики из Делфи
Добавлено: 21 сен 2004, 14:47
snoopy
Спасибо буду пробовать!!!
Re: Вставка записи в БД Галактики из Делфи
Добавлено: 24 сен 2004, 11:07
snoopy
Что то не получается, все равно ошибку пишет. :-/
Re: Вставка записи в БД Галактики из Делфи
Добавлено: 07 окт 2004, 08:19
mik
Интересно, какую ошибку пишет...
у меня и в делфях все в порядке.
вот например конвертация на делфи обычной даты в галактиканскую. Тут в общем то все то же самое:
uses DateUtils;
...
function DateToGALDate(dDate:TDateTime):Longint;
begin
Result := ((YearOf(dDate)*256) + MonthOf(dDate))*256 + DayOf(dDate)
end;
Re: Вставка записи в БД Галактики из Делфи
Добавлено: 04 ноя 2004, 10:41
orlov
я создал запись для работы с датой и временем что очень понятно
и на ней построил ковертацию
вообще я сделал генератор для получения
структуры таблици для Delphi где автоматом
галактическую дату и время заменял моими типами и забыл о проблеме
вот как выглядят мои функции
tdateBRTV=packed record
day:byte;
month:byte;
year:word;
end;
TTimeBRTV=packed record
milliSEC:byte;
Second:byte;
Minute:byte;
Hour:byte;
end;
function BTRVGetDate( VDate:tdateBRTV ):tdate;
begin
result:=dateutils.EncodeDateTime(vdate.year ,vdate.month ,vdate.day,0,0,0,0);
end;
function BTRVSetDate( VDate:Tdate ):tdateBRTV ;
begin
Result.day := DayOf(VDate );
Result.month :=MonthOf(VDate );
Result.year := YearOf(VDate );
end;
function BTRVGettime( VTime:TTimeBRTV ):ttime;
begin
Result := EncodeTime(VTime.Hour,VTime.Minute ,VTime.Second ,VTime.milliSEC );
end;
function BTRVSettime( VTime:TTime ):TTimeBRTV ;
begin
Result.Hour :=HourOf(VTime );
Result.Minute :=MinuteOf(VTime );
Result.Second :=SecondOf(VTime );
Result.milliSEC :=MilliSecondOf(VTime );
end;