Вставка записи в БД Галактики из Делфи

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
snoopy
Новичок
Сообщения: 23
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тюмень

Вставка записи в БД Галактики из Делфи

Сообщение snoopy »

При вставке записи в БД Галактики из Делфи, происходит ошибка с полем типа data (конкретно поле dsopr). В каком формате подсовывать дату в запрос?
Пробовал: 20.09.2004, 20/09/2004

Очень нужно!!!
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

Re: Вставка записи в БД Галактики из Делфи

Сообщение WiRuc »

В виде целого числа
mik
Новичок
Сообщения: 25
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Re: Вставка записи в БД Галактики из Делфи

Сообщение 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


Если кто знает лучший способ, интересно было бы узнать.
snoopy
Новичок
Сообщения: 23
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тюмень

Re: Вставка записи в БД Галактики из Делфи

Сообщение snoopy »

Спасибо буду пробовать!!!
:D
snoopy
Новичок
Сообщения: 23
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тюмень

Re: Вставка записи в БД Галактики из Делфи

Сообщение snoopy »

Что то не получается, все равно ошибку пишет. :-/
mik
Новичок
Сообщения: 25
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Re: Вставка записи в БД Галактики из Делфи

Сообщение mik »

Интересно, какую ошибку пишет...
у меня и в делфях все в порядке.
вот например конвертация на делфи обычной даты в галактиканскую. Тут в общем то все то же самое:
uses DateUtils;
...
function DateToGALDate(dDate:TDateTime):Longint;
begin
Result := ((YearOf(dDate)*256) + MonthOf(dDate))*256 + DayOf(dDate)
end;
orlov
Сообщения: 1
Зарегистрирован: 29 мар 2005, 17:49
Откуда: азия казахстан евразийская энергитическая корпорацияя

Re: Вставка записи в БД Галактики из Делфи

Сообщение 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;
Ответить