Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ADO последовательность действий 
:(
    Опции темы
Sliva
Дата 13.2.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Доброе утро всем!  smile 
Я вообще запуталась.
Напишите, пожалуйста, последовательность действий работы с ADO и двумя базами данных (Sybase и Access).
Например, 
1. создать компонент  AdoConnection для Sybase
2. создать компонент  AdoConnection для Access 
3. ...

И еще, я прочла, что для INSERT лучше использовать не Query, а ADOCommand. Сколько их нужно - 1 для Access (именно для вставки) или 2 для Access и Sybase.
Кусками информацию даете. От этого только хуже становится  smile 
PM   Вверх
Rodman
Дата 13.2.2008, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Цитата(Sliva @  13.2.2008,  08:20 Найти цитируемый пост)
И еще, я прочла, что для INSERT лучше использовать не Query, а ADOCommand.

не возьмусь утверждать...

Цитата(Sliva @  13.2.2008,  08:20 Найти цитируемый пост)
1. создать компонент  AdoConnection для Sybase
2. создать компонент  AdoConnection для Access 

истину глаголишь, а потом если тебе нужно выводить данные в грид или еще куда-нить, то для этого нужен отдельный Query... 

а вот при одноразовом можно использовать динамически создаваемый Query... "на лету" менять в нем конекшн и запрос...

ЗЫ: может и кусочная инфа... но если у спокоиться и подумать, всю логическую цепочку сможешь самостоятельно провести!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Sliva
Дата 13.2.2008, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Хорошо, я думаю делать так:
1. создать компонент  AdoConnection для Sybase
2. создать компонент  AdoConnection для Access 
3. создать компонент  AdoTable для Sybase (для отображения изначальной таблицы Sybase)
4. создать компонент  AdoTable для Access (хотя не уверена зачем)
5.  создать компонент  AdoQuery для Sybase (чтобы можно было определить  запрос с условием)
6. создать компонент  AdoQuery для Access (хотя не уверена зачем)
7. создать компонент AdoCommand для Access (чтобы делать INSERT)

Проверьте, пожалуйста, что не так smile 




PM   Вверх
Rodman
Дата 13.2.2008, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



давай дадим им имена так:
1. AdoCSybase
2. AdoCAccess
3. AdoTSybase 
4. AdoTAccess
5. AdoQSybase
6. AdoQAccess (ну для тех же целей что и предыдущий, но для Access, конешно если понадобится)
7. AdoComAccess - не уверен что он лучше Query, но пробуй... заодно и научишься!

пока все вроде в норме!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Sliva
Дата 13.2.2008, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А такой цикл правильный:
Код

adoQSybase.Open;
adoQSybase.First;

  while not adoQSybase.EOF  do
    begin

 ADOCommand.CommandText:='INSERT INTO WorkPeriod VALUES (:id, :date_beg, :date_end, :namePodr, :namePodr,'+'list12,'+'2, 24, 3,'+'ggg,'+'comment)';
 ADOCommand.Execute;

  adoQSy.Next;
  end;

???
У меня большие сомнения с запросом с параметрами. Ведь надо как-то присвоить значения этим параметрам? Проверьте, пожалуйста! 
PM   Вверх
Rodman
Дата 13.2.2008, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



есть замечания, см. в коде
Код

adoQSybase.Open; //если открываешь, значит там уже запрос есть... надеюсь все так!
adoQSybase.First;
while not adoQSybase.EOF  do
begin
  ADOCommand.CommandText:='INSERT INTO WorkPeriod VALUES (:id, :date_beg, :date_end, :namePodr, :namePodr,'+'list12,'+'2, 24, 3,'+'ggg,'+'comment)';
//начиная с с параметра - это ты константы вставляешь??? ил что? 
// и еще поле ID разве не счетчик??? если так то ты не можешь ему ничего присваивать... - а значит надо переделать запрос
// далее - а где передача параметров??? 
  ADOCommand.Parameters.ParamByName('date_beg').Value:=TraliVali;
...
  ADOCommand.Execute;
  //adoQSy.Next; - такого нету
  adoQSybase.Next; //наверно так надо!
end;

PM MAIL WWW Skype GTalk YIM MSN   Вверх
Sliva
Дата 13.2.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

adoQSybase.Open; //если открываешь, значит там уже запрос есть... надеюсь все так!

Так  smile 
Цитата

Код

ADOCommand.CommandText:='INSERT INTO WorkPeriod VALUES (:id, :date_beg, :date_end, :namePodr, :namePodr,'+'list12,'+'2, 24, 3,'+'ggg,'+'comment)';
//начиная с с параметра - это ты константы вставляешь??? ил что? 
// и еще поле ID разве не счетчик??? если так то ты не можешь ему ничего присваивать... - а значит надо переделать запрос
// далее - а где передача параметров??? 
  ADOCommand.Parameters.ParamByName('date_beg').Value:=TraliVali;



Вот-вот, поле id - счетчик! и я не знаю как переделать. Если я делаю:
Код

query.SQL.Clear;
query.SQL.Text:='select max(period_id) as maxId from WorkPeriod';
query.Open;
mId:=queryMaxId.Value; // выбираю последнее значение счетчика в таблице, в которую добавляю данные
mId:=mId+1;

и пишу:
Код

ADOCommand.CommandText:='INSERT INTO WorkPeriod VALUES (mId, :date_beg, :date_end, :namePodr ...

то все равно ошибка!  smile 
Цитата

// далее - а где передача параметров??? 
  ADOCommand.Parameters.ParamByName('date_beg').Value:=TraliVali;

Так я и думала! Спасибо 
PM   Вверх
Rodman
Дата 13.2.2008, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



назови плиз имена всех полей таблицы WorkPeriod 
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Sliva
Дата 13.2.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



period_id (*)
begDate (*)
endDate (*)
post (*)
postStaff (*)
list12
rate
hours
empl_id (*)
stag
comment
поля (*) мне надо заполнить, остальные - нет. А Таблица из Sybase такая:

num 
namePost // этим полем заполняю post и postStaff в workPeriod
Post_id  
Date_BEG // этим - begDate
Date_END // этим - утвВфеу
Os
Kod

Добавлено через 3 минуты и 17 секунд
А еще:
Код

ADOCommand.Parameters.ParamByName('date_beg').Value:=TraliVali;

присвоение значений параметрам должно быть после INSERT или до?
PM   Вверх
Rodman
Дата 13.2.2008, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Код

adoQSybase.Open; 
adoQSybase.First;
while not adoQSybase.EOF  do
begin
  ADOCommand.CommandText:='INSERT INTO WorkPeriod (period_id, begDate, endDate, post, postStaff, list12, rate, hours, 
empl_id, stag, comment) VALUES (:PID, :date_beg, :date_end, :namePodr, :namePodr1, :Prm1, :Prm2, :Prm3, :Prm4, :Prm5, :Prm6)';
  ADOCommand.Parameters.ParamByName('PID').Value:=TraliVali;
  ADOCommand.Parameters.ParamByName('date_beg').Value:=adoQSybase.Fields.Fields[3].AsString;//за типы и параметры из запроса adoQSybase не уверен, т.к. не видел его
  ADOCommand.Parameters.ParamByName('date_end').Value:=adoQSybase.Fields.Fields[4].AsString;
  ADOCommand.Parameters.ParamByName('namePodr').Value:=adoQSybase.Fields.Fields[1].AsString;
  ADOCommand.Parameters.ParamByName('namePodr1').Value:=adoQSybase.Fields.Fields[1].AsString;
  ADOCommand.Parameters.ParamByName('Prm1').Value:=TraliVali;
  ADOCommand.Parameters.ParamByName('Prm2').Value:=TraliVali;
  ADOCommand.Parameters.ParamByName('Prm3').Value:=TraliVali;
  ADOCommand.Parameters.ParamByName('Prm4').Value:=TraliVali;
  ADOCommand.Parameters.ParamByName('Prm5').Value:=TraliVali;
  ADOCommand.Parameters.ParamByName('Prm6').Value:=TraliVali;
  ADOCommand.Execute;
  adoQSybase.Next; 
end;

вот примерно так и должно быть!
Цитата(Sliva @  13.2.2008,  10:17 Найти цитируемый пост)
А Таблица из Sybase такая:

тут пока я не рассматриваю...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Sliva
Дата 13.2.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



 smile 
Так! Одну ошибку я уже нашла у себя! В параметрах описала поля таблицы Sybase, ИЗ которой загружаю данные в Access. Надо же наоборот!  smile 
Код

  ADOCommand.Parameters.ParamByName('Prm1').Value:=TraliVali;
  ADOCommand.Parameters.ParamByName('Prm2').Value:=TraliVali;
  ADOCommand.Parameters.ParamByName('Prm3').Value:=TraliVali;
  ADOCommand.Parameters.ParamByName('Prm4').Value:=TraliVali;
  ADOCommand.Parameters.ParamByName('Prm5').Value:=TraliVali;
  ADOCommand.Parameters.ParamByName('Prm6').Value:=TraliVali;


Т.е. я так поняла, что ВСЕ параметры надо описывать и присваивать им? Даже, какие мне надо заполнять?

Сейчас пробовать буду smile 
PM   Вверх
Rodman
Дата 13.2.2008, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Цитата(Sliva @  13.2.2008,  10:32 Найти цитируемый пост)
Т.е. я так поняла, что ВСЕ параметры надо описывать и присваивать им? Даже, какие мне надо заполнять?

вот в твоем первоначальном запросе было просто после VALUES описаны параметры, такой способ применим если ты присваиваешь значения абсолютно всем полям, а так как у тебя поле ID счетчик, он сам обновляется и ему ничего не присвоишь... значит надо после упоминания таблицы перечислить нужные поля, а после VALUES параметры в том же порядке (как реализовано в моем предложении)..

Цитата(Sliva @  13.2.2008,  10:32 Найти цитируемый пост)
TraliVali

как сама понимаешь, надо поменять на нужные данные...

жду результат!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Sliva
Дата 13.2.2008, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



сейчас ошибка вылетела, что поле workPeriod.endDate не может иметь значение null, n/r/ свойство required имеет значение TRUE. Введите значение в поле.
 А где это свойство?
PM   Вверх
Rodman
Дата 13.2.2008, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



пошагово пройди и глянь.. туда вооще че нить передается???
а по поводу траблы пока ниче не могу сказать!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Sliva
Дата 13.2.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Эту ошибку больше не выдает, но пишет теперь:
Изменения не были внесены из-за повторяющихся значений в индексе, ключевых полях или связях . Измените данные в поле или полях, содержащих одинаковые значения...

Может, это из-за вот-этого:
Код

ADOCommand.Parameters.ParamByName('period_id').Value:=10;

??? Я поняла, что period_id можно присвоить любой 
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0653 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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