Поиск:

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

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



В гугле нашел примеры только под vb, net и делфи. С базами никогда до этого не сталкивался. Где есть инфа по описанию, как работать с ADO? Какой день уже с ним морочаюсь.
Почитал здесь, оказывается, для чтения, записи, модификации нужно различные параметры прописывать.
из компоентов кинул: ADOConnection, ADOQuery
для примера база: отдельный дбф на пару полей id - автоинкрементное, name, fam - строковые.
нужно читать-писать-модифицировать, + возможность изменять путь к дбф (из меню в самой проге).
PM MAIL   Вверх
Rodman
Дата 11.1.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


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

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



Лови пример...
Он тоже на делфи.. по сути все точки на стрелочки поменять надо...

а остальные методы описаны...

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


Yersinia pestis
****


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

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



Цитата(Gunslinger @  11.1.2009,  14:29 Найти цитируемый пост)
делфи

И в чём разница с Билдером? smile 

Цитата(Gunslinger @  11.1.2009,  14:29 Найти цитируемый пост)
писать-модифицировать

С dbf сиё возможно только запросами, т.е. AdoTable.Edit....AdoTable.Post не прокатит.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

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



Цитата(Rodman @  11.1.2009,  21:44 Найти цитируемый пост)
Лови пример...

поймал, но...
 
Цитата(Данкинг @  11.1.2009,  23:45 Найти цитируемый пост)
С dbf сиё возможно только запросами, т.е. AdoTable.Edit....AdoTable.Post не прокатит. 

мне друг как-то код набросал:
Код

  ADOQuery1->Insert();
   ADOQuery1NAME->Value="Серега"; 
  ADOQuery1FAM->Value="Иванов";
  ADOQuery1DATE->Value=StrToDateDef("d/m/y", Date());

только через драйвер джетовский под аксесс работал. Я сделал также, но под vfp-драйвер - не работает. 
Так каким образом можно с рботать с dbf?
PM MAIL   Вверх
Данкинг
Дата 12.1.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



Цитата(Gunslinger @  12.1.2009,  09:55 Найти цитируемый пост)
Так каким образом можно с рботать с dbf? 

Я же говорю - запросами. Update, Insert.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

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



Цитата(Данкинг @  12.1.2009,  11:43 Найти цитируемый пост)
Я же говорю - запросами. Update, Insert

куда их писать? в свойство sql ADOQuery? Но я там написал селект на всю таблицу, чтобы в квери все поля добавить можно было. Для каждого запроса своя ADOQuery?

Это сообщение отредактировал(а) Gunslinger - 12.1.2009, 12:24
PM MAIL   Вверх
Данкинг
Дата 12.1.2009, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



Цитата(Gunslinger @  12.1.2009,  12:24 Найти цитируемый пост)
в свойство sql ADOQuery?

Угу.

Цитата(Gunslinger @  12.1.2009,  12:24 Найти цитируемый пост)
Но я там написал селект на всю таблицу, чтобы в квери все поля добавить можно было.

В данном случае удобнее было бы использовать AdoTable для отображения данных таблицы. А так - ну да, вторую кверю заюзай. smile Или же сначала добавь поля, а потом уже делай select...

Это сообщение отредактировал(а) Данкинг - 12.1.2009, 12:31


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

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



Цитата(Данкинг @  12.1.2009,  12:30 Найти цитируемый пост)
Или же сначала добавь поля, а потом уже делай select...

если ты про Add all fields, то без зпаписи селекта в sql ADOConnection'а выводится сообщение об ошибки проперти sql... 
Ладно, буду на каждый запрос свою квери делать со своей sql. Тогда:
1. В чем разница, если писать запрос в проперть или в коде, как у Rodman'a? Ты говорил, что с dbf'ами нужно запросами. Получается, такое разнообразие потому, что ADO - компонент для работы с различными бд, из-за его универсальности?
2. Как в sql-коде указать переменную программы, которую нужно записать?
PM MAIL   Вверх
Данкинг
Дата 12.1.2009, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



Цитата(Gunslinger @  12.1.2009,  13:09 Найти цитируемый пост)
1. В чем разница, если писать запрос в проперть или в коде, как у Rodman'a? 

А как там у него? Пример качать неохота. smile В любом случае, в .sql.text пишется запрос, а как ещё-то можно.

Цитата(Gunslinger @  12.1.2009,  13:09 Найти цитируемый пост)
Как в sql-коде указать переменную программы, которую нужно записать? 

Через параметры логичней всего.

Код

AdoQuery.Close;
AdoQuery.SQL.Clear;
AdoQuery.SQL.Add('insert into TABLE values(:par1, :par2)');
AdoQuery.Parameters.ParamByName('par1').Value:='aaaa';
AdoQuery.Parameters.ParamByName('par2').Value:='bbbb';


Это сообщение отредактировал(а) Данкинг - 12.1.2009, 23:06


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

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



Цитата(Данкинг @  12.1.2009,  23:05 Найти цитируемый пост)
Через параметры логичней всего.

AdoQuery.Close;
AdoQuery.SQL.Clear;
AdoQuery.SQL.Add('insert into TABLE values(:par1, :par2)');
AdoQuery.Parameters.ParamByName('par1').Value:='aaaa';
AdoQuery.Parameters.ParamByName('par2').Value:='bbbb';


Вот, такой код у него. 
Попробовал - в таблицу ничего не добавляется:
Код

ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("insert into MAIN values(:Name, :Fam)");
ADOQuery1->Parameters->ParamByName("Name")->Value="aaaa";
ADOQuery1->Parameters->ParamByName("Fam")->Value="bbbb";

Таблица Main.dbf; 
Поля: id (автоинк), Name (чар), Fam(чар).
Компоненты: ADOConnection (тест подключения проходит), ADOQuery (в проперти параметры видт названия полей; проперть SQL пустая).
Смотрю через фокс.

--------------
в проперти параметров квери названия полей пропали. можно добавить только цифры: 0, 1,2, ...

Это сообщение отредактировал(а) Gunslinger - 13.1.2009, 11:33
PM MAIL   Вверх
Данкинг
Дата 14.1.2009, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



Цитата(Gunslinger @  13.1.2009,  11:27 Найти цитируемый пост)
Попробовал - в таблицу ничего не добавляется:

А ADOQuery1->ExecSQL сделал, надеюсь?


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

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



Цитата(Данкинг @  14.1.2009,  01:07 Найти цитируемый пост)
А ADOQuery1->ExecSQL сделал, надеюсь?

Неаsmile По поиску смотрел - была тема, где эта команда проскакивала. Но я тогда прогнал. Сейчас:
Код

ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("insert into MAIN values(:Name, :Fam)");
ADOQuery1->Parameters->ParamByName("Name")->Value="aaaa";
ADOQuery1->Parameters->ParamByName("Fam")->Value="bbbb";
ADOQuery1->ExecSQL

В проперти параметерс квери создал две переменные с именами Name и Fam - те поля таблицы, куда запись будет. Первый раз строка добавилась, на второй раз вылезла ошибка: Неправильно определен объект Parameter. Предоставлены несовместимые типы или неполные сведения. 



Это сообщение отредактировал(а) Gunslinger - 14.1.2009, 09:38
PM MAIL   Вверх
Данкинг
Дата 14.1.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



Цитата(Gunslinger @  14.1.2009,  09:36 Найти цитируемый пост)
В проперти параметерс квери создал две переменные с именами Name и Fam - те поля таблицы, куда запись будет.

А зачем в проперти смамой квери что-то писать? Достаточно параметры указать в самом коде, т.е. как в примере.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

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



Цитата(Данкинг @  14.1.2009,  11:47 Найти цитируемый пост)
А зачем в проперти смамой квери что-то писать?

он такую ошибку выдавал - вот я и написал. Сейчас в проперти все стер - все равно такую ошибку пишет. Подсвечивает синим закрывающую скобку обработика нажатия кнопки, куда поместл код - как раз за ADOQuery1->ExecSQL();
PM MAIL   Вверх
Данкинг
Дата 14.1.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



Цитата(Gunslinger @  14.1.2009,  12:26 Найти цитируемый пост)
Сейчас в проперти все стер - все равно такую ошибку пишет. 

Не знаю тогда, я всё так же пишу, и работает. Попробуй на самом фоксе те же данные ввести.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

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



Цитата(Данкинг @  14.1.2009,  13:55 Найти цитируемый пост)
Не знаю тогда, я всё так же пишу, и работает. Попробуй на самом фоксе те же данные ввести. 

с фокса нормально вводятся. Если бы вообще не вставлялось, а тут один раз делает инсерт - и все, дальше ошибка. Раз работает, скорее всего я настройки компонентов неправильно сделал... Либо с драйвером проблема, но не думаю. 
PM MAIL   Вверх
Данкинг
Дата 14.1.2009, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



А строка подключения какая?


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

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



Привет! Строка подключения: 
Код

Provider=VFPOLEDB.1;Data Source=D:\MY_PROGRAM;Mode=Share Deny None;
Extended Properties="";User ID="";Password="";Mask Password=False;
Cache Authentication=False;Encrypt Password=False;Collating Sequence=MACHINE;DSN=""

Из компонентов на форме: ADOConnection, ADOQuery.
Выставил в проперти ADOConnection Connected=true, проперть Mode выставилась в: cmShareDenyNone


Это сообщение отредактировал(а) Gunslinger - 15.1.2009, 09:15
PM MAIL   Вверх
Данкинг
Дата 15.1.2009, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



У меня строка подключения всегда короче, типа такой:

'Provider=VFPOLEDB.1;Data Source=D:\MY_PROGRAM;Password="";Collating Sequence=MACHINE'

Кстати, пробелов в пути к таблице нет?



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


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

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



Цитата(Данкинг @  15.1.2009,  11:52 Найти цитируемый пост)

Кстати, пробелов в пути к таблице нет?

нет.
Попробовал твою строку сокращенную - та же песня. Привязался к этому Parameter... Ты в кверях какие свойства настраиваешь (если запрос не в проперти, а в коде)? Вообще "критические" настройки у этих компонентов (кроме строки подключения) есть?
PM MAIL   Вверх
Данкинг
Дата 15.1.2009, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



Цитата(Gunslinger @  15.1.2009,  15:18 Найти цитируемый пост)
Ты в кверях какие свойства настраиваешь

Ничего не настраиваю кроме привязки к AdoConnection... Ну а если в самом запросе вместо параметров написать "aaaa", "bbbb", будет работать?!


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

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



Сюда я помещал листинг без закомментированной строки
Код

ADOQuery2->SQL->Clear();

, а в коде так:
Код

//ADOQuery1->Close();
ADOQuery1->SQL->Clear(); <---------раскомментировал - заработало
ADOQuery1->SQL->Add("insert into MAIN(Name,Fam) values(:Name, :Fam)");
ADOQuery1->Parameters->ParamByName("Name")->Value="aaaa";
ADOQuery1->Parameters->ParamByName("Fam")->Value="bbbb";
ADOQuery1->ExecSQL();

Извини за шухер. 

Зачем нужен Close()? Это если в связке с Open() - сначала сформировал запрос, затем только открыл соединение?
Теперь про select, delete, update. По прмеру кода Родмана:
Код

ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Add("delete from MAIN where (Name=:Name)");
ADOQuery2->Parameters->ParamByName("Name")->Value="od";
ADOQuery2->ExecSQL();

Ошибки не выдает, но и не удаляет. Сделал через квери1 - так же.
PM MAIL   Вверх
Gunslinger
Дата 20.1.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

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



Код

{
ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Add("delete from MAIN(Name,Fam) where Name=:Name;");
ADOQuery2->Parameters->ParamByName("Name")->Value="od";
ADOQuery2->ExecSQL();
}


Variable 'NAME' is not found. 
PM MAIL   Вверх
Rodman
Дата 20.1.2009, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


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

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



NAME - это зареганное слово
Код

{
ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Add("delete from MAIN where [Name]=:Prm;");
ADOQuery2->Parameters->ParamByName("Prm")->Value="od";
ADOQuery2->ExecSQL();
}
а так?
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Gunslinger
Дата 21.1.2009, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

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



Цитата(Rodman @  20.1.2009,  21:13 Найти цитируемый пост)
а так?

опять про Name кричит. Сменил условие на второе поле, благо табличка тестовая.
Код

ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Add("delete from MAIN where Fam=:Prm;");
ADOQuery2->Parameters->ParamByName("Prm")->Value="bbbb";
ADOQuery2->ExecSQL();
}

Теперь молчит, но не удаляет, хотя в табличке таких записей есть.
Name - зарегина ADO?
В пропертях квери кроме строки подключения к ADOConnection больше ничего указывать не нужно?
PM MAIL   Вверх
Данкинг
Дата 21.1.2009, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



Цитата(Rodman @  20.1.2009,  21:13 Найти цитируемый пост)
NAME - это зареганное слово

Я про это подумал, но не сказал, поскольку фокс и так работает обычно.

Цитата(Gunslinger @  16.1.2009,  11:34 Найти цитируемый пост)
Теперь про select, delete,

По поводу delete: ведь на фоксе "delete from..." только помечает на удаление, а для физического удаления нужно ввести команду "pack". А вот как это сделать запросом через ADO - я так и не выяснил. smile 

Цитата(Gunslinger @  16.1.2009,  11:34 Найти цитируемый пост)
Зачем нужен Close()? 

Чтобы кверя была закрыта, пока ты с ней что-то там делаешь.

Добавлено через 3 минуты и 32 секунды
Цитата(Gunslinger @  21.1.2009,  09:56 Найти цитируемый пост)
Name - зарегина ADO?

Сколько я с фоксом работаю - проблем с полем NAME никогда не возникало...

Это сообщение отредактировал(а) Данкинг - 21.1.2009, 11:49


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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