| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Никак не могу найти пример работы с ADO |
| Автор: Gunslinger 11.1.2009, 14:29 |
| В гугле нашел примеры только под vb, net и делфи. С базами никогда до этого не сталкивался. Где есть инфа по описанию, как работать с ADO? Какой день уже с ним морочаюсь. Почитал здесь, оказывается, для чтения, записи, модификации нужно различные параметры прописывать. из компоентов кинул: ADOConnection, ADOQuery для примера база: отдельный дбф на пару полей id - автоинкрементное, name, fam - строковые. нужно читать-писать-модифицировать, + возможность изменять путь к дбф (из меню в самой проге). |
| Автор: Rodman 11.1.2009, 21:44 |
| Лови http://forum.vingrad.ru/index.php?show_type=forum&showtopic=174138&kw=%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%B5%D0%B9%D1%88%D0%B8%D0%B5-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D0%B1%D0%B0%D0%B7%D0%BE%D0%B9... Он тоже на делфи.. по сути все точки на стрелочки поменять надо... а остальные методы описаны... задавай вопросы по ним... |
| Автор: Данкинг 11.1.2009, 23:45 |
И в чём разница с Билдером? С dbf сиё возможно только запросами, т.е. AdoTable.Edit....AdoTable.Post не прокатит. |
| Автор: Данкинг 12.1.2009, 11:43 |
Я же говорю - запросами. Update, Insert. |
| Автор: Gunslinger 12.1.2009, 12:24 |
куда их писать? в свойство sql ADOQuery? Но я там написал селект на всю таблицу, чтобы в квери все поля добавить можно было. Для каждого запроса своя ADOQuery? |
| Автор: Данкинг 12.1.2009, 12:30 | ||
Угу.
В данном случае удобнее было бы использовать AdoTable для отображения данных таблицы. А так - ну да, вторую кверю заюзай. |
| Автор: Gunslinger 12.1.2009, 13:09 |
если ты про Add all fields, то без зпаписи селекта в sql ADOConnection'а выводится сообщение об ошибки проперти sql... Ладно, буду на каждый запрос свою квери делать со своей sql. Тогда: 1. В чем разница, если писать запрос в проперть или в коде, как у Rodman'a? Ты говорил, что с dbf'ами нужно запросами. Получается, такое разнообразие потому, что ADO - компонент для работы с различными бд, из-за его универсальности? 2. Как в sql-коде указать переменную программы, которую нужно записать? |
| Автор: Данкинг 12.1.2009, 23:05 | ||||||
А как там у него? Пример качать неохота.
Через параметры логичней всего.
|
| Автор: Gunslinger 13.1.2009, 11:27 | ||||
Вот, такой код у него. Попробовал - в таблицу ничего не добавляется:
Таблица Main.dbf; Поля: id (автоинк), Name (чар), Fam(чар). Компоненты: ADOConnection (тест подключения проходит), ADOQuery (в проперти параметры видт названия полей; проперть SQL пустая). Смотрю через фокс. -------------- в проперти параметров квери названия полей пропали. можно добавить только цифры: 0, 1,2, ... |
| Автор: Данкинг 14.1.2009, 01:07 |
А ADOQuery1->ExecSQL сделал, надеюсь? |
| Автор: Gunslinger 14.1.2009, 09:36 | ||
Неа
В проперти параметерс квери создал две переменные с именами Name и Fam - те поля таблицы, куда запись будет. Первый раз строка добавилась, на второй раз вылезла ошибка: Неправильно определен объект Parameter. Предоставлены несовместимые типы или неполные сведения. |
| Автор: Данкинг 14.1.2009, 11:47 | ||
А зачем в проперти смамой квери что-то писать? Достаточно параметры указать в самом коде, т.е. как в примере. |
| Автор: Gunslinger 14.1.2009, 12:26 |
он такую ошибку выдавал - вот я и написал. Сейчас в проперти все стер - все равно такую ошибку пишет. Подсвечивает синим закрывающую скобку обработика нажатия кнопки, куда поместл код - как раз за ADOQuery1->ExecSQL(); |
| Автор: Данкинг 14.1.2009, 13:55 |
Не знаю тогда, я всё так же пишу, и работает. Попробуй на самом фоксе те же данные ввести. |
| Автор: Gunslinger 14.1.2009, 17:30 | ||
с фокса нормально вводятся. Если бы вообще не вставлялось, а тут один раз делает инсерт - и все, дальше ошибка. Раз работает, скорее всего я настройки компонентов неправильно сделал... Либо с драйвером проблема, но не думаю. |
| Автор: Данкинг 14.1.2009, 17:52 |
| А строка подключения какая? |
| Автор: Gunslinger 15.1.2009, 09:14 | ||
Привет! Строка подключения:
Из компонентов на форме: ADOConnection, ADOQuery. Выставил в проперти ADOConnection Connected=true, проперть Mode выставилась в: cmShareDenyNone |
| Автор: Данкинг 15.1.2009, 11:52 |
| У меня строка подключения всегда короче, типа такой: 'Provider=VFPOLEDB.1;Data Source=D:\MY_PROGRAM;Password="";Collating Sequence=MACHINE' Кстати, пробелов в пути к таблице нет? |
| Автор: Gunslinger 15.1.2009, 15:18 |
нет. Попробовал твою строку сокращенную - та же песня. Привязался к этому Parameter... Ты в кверях какие свойства настраиваешь (если запрос не в проперти, а в коде)? Вообще "критические" настройки у этих компонентов (кроме строки подключения) есть? |
| Автор: Данкинг 15.1.2009, 23:38 |
Ничего не настраиваю кроме привязки к AdoConnection... Ну а если в самом запросе вместо параметров написать "aaaa", "bbbb", будет работать?! |
| Автор: Gunslinger 16.1.2009, 11:34 | ||||||
Сюда я помещал листинг без закомментированной строки
, а в коде так:
Извини за шухер. Зачем нужен Close()? Это если в связке с Open() - сначала сформировал запрос, затем только открыл соединение? Теперь про select, delete, update. По прмеру кода Родмана:
Ошибки не выдает, но и не удаляет. Сделал через квери1 - так же. |
| Автор: Gunslinger 20.1.2009, 16:03 | ||
Variable 'NAME' is not found. |
| Автор: Rodman 20.1.2009, 21:13 | ||
NAME - это зареганное слово
|
| Автор: Gunslinger 21.1.2009, 09:56 | ||
опять про Name кричит. Сменил условие на второе поле, благо табличка тестовая.
Теперь молчит, но не удаляет, хотя в табличке таких записей есть. Name - зарегина ADO? В пропертях квери кроме строки подключения к ADOConnection больше ничего указывать не нужно? |
| Автор: Данкинг 21.1.2009, 11:49 |
Я про это подумал, но не сказал, поскольку фокс и так работает обычно. По поводу delete: ведь на фоксе "delete from..." только помечает на удаление, а для физического удаления нужно ввести команду "pack". А вот как это сделать запросом через ADO - я так и не выяснил. Чтобы кверя была закрыта, пока ты с ней что-то там делаешь. Добавлено через 3 минуты и 32 секунды Сколько я с фоксом работаю - проблем с полем NAME никогда не возникало... |