Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Трабл при вставке данных, Delphi+Ado MySql-->Oracle 
V
    Опции темы
NetShadow
Дата 30.10.2006, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Суть такая, делаю выборку, а потом эти данные надо вставить выборку делаю из MySql вставку в Oracle, код ниже:
Код

procedure TForm1.Button5Click(Sender: TObject);
begin
 MySqlADOQuerySelId.Sql.Clear;
 MySqlADOQuerySelId.Sql.Text:='select id_person, id_post_person'
                             +' from tmp_person'
                             +' order by id_person'
                             +' desc limit '
                             +Edit1.Text;
 Memo1.Lines.Add(MySqlADOQuerySelId.Sql.Text);
 MySqlADOQuerySelId.Open;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  OraADOQuery.SQL.Clear;
  OraADOQuery.Open;
    while not MySqlADOQuerySelId.EOF do
 begin
    OraADOQuery.Sql.Text:='insert into epique_insert_person (id_person,id_post_person)'
                         +'values(:id_person,:id_post_person)';
    OraADOQuery.Parameters.ParamByName('id_person').Value:=MySqlADOQuerySelId.Fields[0].AsString;
    OraADOQuery.Parameters.ParamByName('id_post_person').Value:=MySqlADOQuerySelId.Fields[0].AsString;
    OraADOQuery.ExecSQL;
    OraADOQuery.Next;
 end;
end;


вставка не происходит, выдаёт ошибку "OraAdoQuery: Missing Sql property", не пойму в чём трабл? подскажите...
PM MAIL ICQ   Вверх
superVad
Дата 30.10.2006, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



с ораклом не работал, но можно попробовать перед values пробел поставить,

вместо - OraADOQuery.Parameters.ParamByName('id_person').Value
написать - OraADOQuery.Parameters.ParamByName('id_person').AsString

и я не уверен, но не могу понять зачем там OraADOQuery.Next;

и еще можно перед инсертом открывать транзакцию и после ее комитить (надежнее както)
PM MAIL   Вверх
NetShadow
Дата 30.10.2006, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



superVad писал:
Цитата

с ораклом не работал, но можно попробовать перед values пробел поставить,

а что изменится?

Цитата

написать - OraADOQuery.Parameters.ParamByName('id_person').AsString

Delphi сразу ругается, и подчёркивает строку, нет такого параметра....

Цитата

и я не уверен, но не могу понять зачем там OraADOQuery.Next;

переход к следующей выбранной строке, которую нужно вставить, если ошибся, поправьте....вопрос остается открытым...
PM MAIL ICQ   Вверх
Vas
Дата 30.10.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Трабл во всем smile
Код

procedure TForm1.Button5Click(Sender: TObject);
begin
 MySqlADOQuerySelId.Sql.Clear;
 MySqlADOQuerySelId.Sql.Text:='select id_person, id_post_person'
                             +' from tmp_person'
                             +' order by id_person'
                             +' desc limit '
                             +Edit1.Text;
 Memo1.Lines.Add(MySqlADOQuerySelId.Sql.Text);
 MySqlADOQuerySelId.Open;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
  OraADOQuery.SQL.Clear;
  OraADOQuery.Open; //открываем запрос  зачем????
    while not MySqlADOQuerySelId.EOF do
 begin
    OraADOQuery.Sql.Text:='insert into epique_insert_person (id_person,id_post_person) values(:id_person,:id_post_person)';
    OraADOQuery.Parameters.ParseSQL(SQL.Text, True); //заставляем запрос разобрать параметры
    OraADOQuery.Parameters.ParamByName('id_person').Value:=MySqlADOQuerySelId.Fields[0].AsString;
    OraADOQuery.Parameters.ParamByName('id_post_person').Value:=MySqlADOQuerySelId.Fields[0].AsString;
    try  //здесь вставляем обработку ошибок и стартуем транзакцию
         OraADOQuery.Connection.BeginTrans;
         OraADOQuery.ExecSQL;
         OraADOQuery.Connection.CommitTrans; //здесь закрываем. Если конечно надо каждую запись фиксировать в базе оракуль, если не все то BeginTrans и CommitTrans ставим вначале и конце процедуры, но только если записей очень много можно получить переполнение Rollback экстента в ОРАКЛЕ.
    except
        on E:EADOError do
                 ShowMessage(E.Message);
    end;    
    MySqlADOQuerySelId.Next;  //вот здесь была ошибка нужно  бежим то по запросу к MySQL а не к ORACLE
 end;
end;


Добавлено @ 10:47 
И вместо Value в параметрах лучше указывать точный тип (AsString, AsInteger и т.д.)И в случае если есть поля типа Blob то такой перенос не сработает  smile 

Это сообщение отредактировал(а) Vas - 30.10.2006, 10:48


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
superVad
Дата 30.10.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



теперь понятно зачем там Next  smile 
PM MAIL   Вверх
NetShadow
Дата 30.10.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Vas писал:

Код

    end;    
    MySqlADOQuerySelId.Next;  //вот здесь была ошибка нужно  бежим то по запросу к MySQL а не к ORACLE
 end;
end;


её-моё, я только сейчас заметил, а над ошибкой с пятницы уже бьюсь...

superVad, Vas спасибо, тема закрыта... smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0853 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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