Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Начинаю работать с ADO 
:(
    Опции темы
Sliva
Дата 11.2.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



СПАСИБО! 
Посмотрите, пожалуйста, что я делаю не так:
Код

DS_Sy.DataSet:=ADOQuery;
ADOQuery.SQL.Text:='SELECT * FROM Dannie where id='+IntToStr(id);
ADOQuery.Open; 
// в query выбираю последний id таблицы Dannie, чтобы вставить по порядку
 max:=Query1Max.Value;

ADO_Sybase.First;

while not ADO_Sybase.EOF
do begin
    ADO_Access.Append;
    ADO_Access.FieldValues['period_id'].AsInteger := max; 
    ADO_Access.FieldValues['begDate'].AsString := ADO_Sybase.FieldValues['Date_Beg'].AsString;
    ADO_Access.FieldValues['endDate'].AsString := '01.01.2000';
    ADO_Access.FieldValues['post'].AsString := ADO_Sybase.FieldValues['NamePodr'].AsString;
    ADO_Access.FieldValues['list1_2'].AsVariant := 'nnn';
    ADO_Access.FieldValues['rate'].AsInteger := max;
    ADO_Access.FieldValues['empl_id'].AsInteger := max;
    ADO_Access.FieldValues['comment'].AsString := 'comment';
    ADO_Access.Post;
    ADO_Sybase.Next;
  end;

 smile  Ошибка такая:
Cannot perfom this operation on closed dataset.
Наверное из-за того, что я открываю Query с DataSet, а работаю с ADO_Sybase и ADO_Access - а они компоненты TADOTable 
А как мне тогда запросы писать в TADOTable - я не знаю. Пробовала только с TQuery

Дело в том, что запрос обязательно мне делать с параметром:
Код

'SELECT * FROM Dannie where id='+IntToStr(id);

Эта строчка  обязательна. 
От Cannot perfom this operation on closed dataset.
я избавилась - поставила ADO_Ac.Activ=true, но теперь другая ошибка:
Код

 ADO_Ac.FieldValues['period_id'].AsInteger := max;

на этой строке выдает ошибку:
Invalid Variant Operation

Это сообщение отредактировал(а) Sliva - 11.2.2008, 15:48
PM   Вверх
Данкинг
Дата 11.2.2008, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



ADO_Access.open есть?

Добавлено @ 19:34
Цитата(Sliva @ 11.2.2008,  15:29)
на этой строке выдает ошибку:
Invalid Variant Operation

Типы совпадают? Пустые строки есть?

А в adotable запросы писать не надо, это компонент для работы с таблицами. А вот если нужно сделать запрос - выборку и т.п., тогда уже нужен adoquery.

Это сообщение отредактировал(а) Данкинг - 11.2.2008, 19:35


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Sliva
Дата 12.2.2008, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Данкинг, 
с типами я разобралась - написала 
Код

 ADOQueryAccess.FieldValues['period_id'] := max;
    ADOQueryAccess.FieldValues['begDate'] := ADOQuerySybase.FieldValues['Date_Beg'];

т.е. раньше использовала TAdoTable, а исправила на TAdoQuery. 

У меня теперь немного другая проблема  smile 
Я добавляю данные в одну таблицу Access, а она связана с 3-мя другими. Я сделала 4 adoQuery, 4 ado connection для подключения к каждой таблице Access. (Может, нужно везде использовать одно adoConnection? ) 
И потом 
4 раза написала 
Код

Ado1Query.open; // таблица 1
Ado2Query.open; // табл. 2
Ado3Query.open; // табл. 3
Ado4Query.open;  // табл.4

потом пишу
Код

while not ADOQuerySYBASE.EOF  do
  begin
  ...  
end;

делаю Append каждого Ado1Query для Access и пополняю каждую таблицу, которая связана с данной, НО возникает такая ошибка:
Field privilege_id cannot be modified
Т.е. нельзя добавлять первичный ключ. А почему? Хотя таблицы БД пустые! 
PM   Вверх
Sliva
Дата 12.2.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я нашла почему так! На поле, на котором вылетает программа, в свойствах стоит ReadOnly=true

 smile 

Сейчас еще разбираюсь. Наверное, вопросы будут еще  smile  

PM   Вверх
Sliva
Дата 12.2.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



 smile  smile  smile 
Это кошмар какой-то! Снова ошибка! Вот теперь и не знаю что делать совсем. ПОМОГИТЕ РАЗОБРАТЬСЯ, ПОЖАЛУЙСТА!!!!
Код

ADOQuery.SQL.Text:='SELECT * FROM Dannie where id='+IntToStr(podr);

ADOQuerySybase.Open; // БЕРУ ДАННЫЕ ОТСЮДА
ADOQueryAccess.Open; // ОСНОВНАЯ ТАБЛИЦА В ACCESS, кот. мне надо заполнить
{
//выбираю последний id  для вставки след. номера
 query1.SQL.Text:='select Max(period_id) as MaxId from WorkPeriod;';
 Query1.Open;
 maxPeriod:=Query1MaxId.Value;

//выбираю последний id  для вставки след. номера
 query2.SQL.Text:='select Max(privBasis_id) as MaxId from Privilege';
 query2.Open;
 maxPriv:=Query2MaxId.Value;

//выбираю последний id  для вставки след. номера
 query3.SQL.Text:='select Max(position_id)as maxId from List;';
 query3.ExecSQL;
 maxPos:=query3maxId.Value;
//  след. номер
  maxPeriod:=maxPeriod+1;
  maxPriv:=maxPriv+1;
  maxPos:=maxPos+1;
}
 k1:=0;
 k2:=0;
 k3:=0;
try
   ADOQueryAccess.Active:=true;
// доп. таблицы, кот-е связаны с основной по id
   ADO_Access1.Open; 
   ADO_Access2.Open;

   ADOQuerySybase.First;
  while not ADOQuery.EOF  do
    begin
    k1:=k1+1; // поскольку таблицы пустые, то заполняю их с 1номера
    k2:=k2+1;
    k3:=k3+1;
     
  ADOQueryAccess.Append;
      ADO_Access1.Append;
      ADO_Access2.Append;

      ADO_Access1.FieldValues['privBasis_id']:=k2;
      ADO_Access1.FieldValues['name']:=ADOQuerySybase.FieldValues['Os'];
      ADO_Access1.FieldValues['position_id']:=1;
      ADO_Access1.FieldValues['period_id']:=k1;

      ADO_Access2.FieldValues['Position_id']:=k3;
      ADO_Access2.FieldValues['begDate'] := ADOQuerySybase.FieldValues['Date_Beg'];
      ADO_Access2.FieldValues['endDate'] := '01.01.2000';
      ADO_Access2.FieldValues['changeType']:='Type';
      ADO_Access2.FieldValues['checkStatus']:='Status';
      ADO_Access2.FieldValues['profession']:= ADOQuerySybase.FieldValues['NamePodr'];
      ADO_Access2.FieldValues['discription']:='description';
      ADO_Access2.FieldValues['list1_2']:='list12';
      ADO_Access2.FieldValues['docs']:='docs';
      ADO_Access2.FieldValues['fact']:=1;
      ADO_Access2.FieldValues['staff']:=1;
      ADO_Access2.FieldValues['subdiv_id']:=1;
      ADO_Access2.FieldValues['okpdtr']:=ADOQuerySybase.FieldValues['NamePodr'];

      ADOQueryAccess.FieldValues['period_id'] := k1;
      ADOQueryAccess.FieldValues['begDate'] := ADOQuerySybase.FieldValues['Date_Beg'];
      ADOQueryAccess.FieldValues['endDate'] := '01.01.2000';
      ADOQueryAccess.FieldValues['post'] := ADOQuerySybase.FieldValues['NamePodr'];
      ADOQueryAccess.FieldValues['post_staff'] := ADOQuerySybase.FieldValues['NamePodr'];
      ADOQueryAccess.FieldValues['list1_2'] := 'nnn';
      ADOQueryAccess.FieldValues['rate'] := 2;
      ADOQueryAccess.FieldValues['hours'] := 24;
      ADOQueryAccess.FieldValues['empl_id'] := k2;
      ADOQueryAccess.FieldValues['stagCalcBasis'] := 'ggg';
      ADOQueryAccess.FieldValues['comment'] := 'comment';

      ADO_Access1.Post;
      ADO_Access2.Post;
      ADOQueryAccess.Post;
      ADOQuerySybase.Next;
    end;
 except

      ShowMessage('Такая запись уже есть!')

end;

ОШИБКА:
class EOleException with message: Изменения не были успешно внесены из-за повторяющихся значений в индексе, ключевых полях или связяхю Измените данные в полях, содержащих повторяющиеся значения, удалите индекс или переопределите его, чтобы разрешить повторяющиеся значения

Что делать с этим?  smile  smile  smile 
PM   Вверх
Rodman
Дата 12.2.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


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

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




M
Rodman
Модератор: Пожалуйста, один топик - один вопрос.

PM MAIL WWW Skype GTalk YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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