Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с передачей даты в SQL-запросе 
:(
    Опции темы
eralex
  Дата 2.5.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 1.1.2005

Репутация: нет
Всего: нет



Есть таблица, созданная вот так:

ADO_CR_TABLE: TADOQuery;

Код

ADO_CR_TABLE.SQL.Add('CREATE TABLE '+Edit2.Text);
ADO_CR_TABLE.SQL.Add('( ID int IDENTITY(1,1) PRIMARY KEY,');
ADO_CR_TABLE.SQL.Add('STATUS varchar(15),');
ADO_CR_TABLE.SQL.Add('DATA_NORILSK datetime,');
ADO_CR_TABLE.SQL.Add('DATA_PRIXODA datetime,');
ADO_CR_TABLE.SQL.Add('TOVAR varchar(200) NOT NULL,');
ADO_CR_TABLE.SQL.Add('SN varchar(25),');
ADO_CR_TABLE.SQL.Add('POCTAVHIK varchar(25),');
ADO_CR_TABLE.SQL.Add('DATA_SDAHI datetime,');
ADO_CR_TABLE.SQL.Add('KOMENT1 varchar(1000),');
ADO_CR_TABLE.SQL.Add('DATA_RESULT datetime,');
ADO_CR_TABLE.SQL.Add('DATA_ZABR datetime,');
ADO_CR_TABLE.SQL.Add('OPERATION varchar(25),');
ADO_CR_TABLE.SQL.Add('KOMENT2 varchar(255),');
ADO_CR_TABLE.SQL.Add('PRICE numeric(11,2),');
ADO_CR_TABLE.SQL.Add('SUMMA_BALANS numeric(11,2),');
ADO_CR_TABLE.SQL.Add('DATA_UHOD datetime,');
ADO_CR_TABLE.SQL.Add('POLE_RES1 tinyint DEFAULT 0)');
ADO_CR_TABLE.ExecSQL;


Стоит задача перевести базу из PARADOX в MS SQL SERVER.
Делаю это так:

Код

procedure TForm1.Button9Click(Sender: TObject);
var tabl:TTable; s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16:string;
begin
  tabl:=TTable.Create(nil);
  tabl.DatabaseName:=ExtractFilePath(Edit6.Text);
  tabl.TableType:=ttParadox;
  tabl.TableName:=ExtractFileName(Edit6.Text);
  tabl.Active:=true;
if ADOConnection1.Connected then ADOConnection1.Close;
connect_to_server(ComboBox1.Text,Edit1.Text,Edit3.Text,Edit4.Text,ADOConnection1);
tabl.DisableControls;
tabl.First;
while not tabl.Eof do
begin
 if tabl['STATUS']<>Null then s1:=tabl['STATUS'] else s1:='';
 if tabl['DATA_NORILSK']<>Null then s2:=tabl['DATA_NORILSK'] else s2:='';
 if tabl['DATA_PRIXODA']<>Null then s3:=tabl['DATA_PRIXODA'] else s3:='';
 s4:=tabl['TOVAR'];
 if tabl['SN']<>Null then s5:=tabl['SN'] else s5:='';
 if tabl['POCTAVHIK']<>Null then s6:=tabl['POCTAVHIK'] else s6:='';
 if tabl['DATA_SDAHI']<>Null then s7:=tabl['DATA_SDAHI'] else s7:='';
 if tabl['KOMENT1']<>Null then  s8:=tabl['KOMENT1'] else s8:='';
 if tabl['DATA_RESULT']<>Null then s9:=tabl['DATA_RESULT'] else s9:='';
 if tabl['DATA_ZABR']<>Null then s10:=tabl['DATA_ZABR'] else s10:='';
 if tabl['OPERATION']<>Null then s11:=tabl['OPERATION'] else s11:='';
 if tabl['KOMENT2']<>Null then s12:=tabl['KOMENT2'] else s12:='';
 if tabl['PRICE']<>Null then s13:=tabl['PRICE'] else s13:='0';
 if tabl['SUMMA_BALANS']<>Null then s14:=tabl['SUMMA_BALANS'] else s14:='0';
 if tabl['DATA_UHOD']<>Null then s15:=tabl['DATA_UHOD'] else s15:='';
 if tabl['POLE_RES1']<>Null then s16:=tabl['POLE_RES1'] else s16:='0';

ADO_CR_TABLE.SQL.Clear;
ADO_CR_TABLE.SQL.Add('INSERT INTO '+Edit2.Text+' (STATUS,DATA_NORILSK,DATA_PRIXODA,TOVAR,SN,');
ADO_CR_TABLE.SQL.Add('POCTAVHIK,DATA_SDAHI,KOMENT1,DATA_RESULT,DATA_ZABR,OPERATION, ');
ADO_CR_TABLE.SQL.Add('KOMENT2,PRICE,SUMMA_BALANS,DATA_UHOD,POLE_RES1) ');
ADO_CR_TABLE.SQL.Add('VALUES ('+QuotedStr(s1)+','+QuotedStr(s2)+','+QuotedStr(s3)+','+QuotedStr(s4)+',');
ADO_CR_TABLE.SQL.Add(QuotedStr(s5)+','+QuotedStr(s6)+','+QuotedStr(s7)+','+QuotedStr(s8)+',');
ADO_CR_TABLE.SQL.Add(QuotedStr(s9)+','+QuotedStr(s10)+','+QuotedStr(s11)+','+QuotedStr(s12)+',');
ADO_CR_TABLE.SQL.Add(s13+','+s14+','+QuotedStr(s15)+','+s16+')');
ADO_CR_TABLE.ExecSQL;
ADO_CR_TABLE.Close;
tabl.Next;
end;
tabl.Free;
end; 


В итоге получаю ошибку:
The conversion of char data type to a datatime data type resulted in an out-of-range datatime value   

Это сообщение отредактировал(а) eralex - 2.5.2006, 23:45
PM MAIL   Вверх
Savek
Дата 3.5.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Возможно несоответствие типов (неохота разбираться в тексте) или неправильный формат даты, попробуй переделать с параметрами,
примерно так:
Код

ADO_CR_TABLE.SQL.Clear;
ADO_CR_TABLE.SQL.Add('INSERT INTO '+Edit2.Text+' (STATUS,DATA_NORILSK,DATA_PRIXODA,TOVAR,SN,');
ADO_CR_TABLE.SQL.Add('POCTAVHIK,DATA_SDAHI,KOMENT1,DATA_RESULT,DATA_ZABR,OPERATION, ');
ADO_CR_TABLE.SQL.Add('KOMENT2,PRICE,SUMMA_BALANS,DATA_UHOD,POLE_RES1) ');
ADO_CR_TABLE.SQL.Add('VALUES (:p1,:p2 ... и т.д.');

//Присвоить значения параметров
with ADO_CR_TABLE.Parameters do begin
    ParamByName('p1').Values:=Tabl1.FieldByName('Status').AsString;
    ParamByName('p2').Values:=Tabl1.FieldByName('Data_Norilsk').AsDateTime;

... и т.д.
end;


В тексте запроса всегда надежнее использовать параметры, да и быстрее  

Это сообщение отредактировал(а) Savek - 3.5.2006, 10:10
PM MAIL   Вверх
Vit
Дата 3.5.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Задача перевода базы данных из Парадокса в MS SQL Server решается при помощи DTS, а не Дельфи 


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
eralex
Дата 3.5.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 1.1.2005

Репутация: нет
Всего: нет



Цитата

Задача перевода базы данных из Парадокса в MS SQL Server решается при помощи DTS, а не Дельфи


У меня как раз стоит конкретная задача по переводу из Парадокса в MS SQL Server програмным путём. DTS не предлагать, буду пробовать с параметрами. Кстати, если дату передавать в явном виде, типа 
Код

QuotedStr('12.05.2006')

то проблем нет, всё прекрасно записывается в дату, а если через строковую переменную
Код

s2:='12.05.2006';
..QuotedStr(s2)..

-то ошибка.
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0436 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.