| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > ADO + MySQL + ODBC |
| Автор: Akella 6.1.2009, 17:12 | ||||||||
| MySQL5, D2007, ADO, ODBC. База живёт на хостинге (Joomla!1.5). Установил дрова "MySQL ODBC 5.1". Соорудил строку подключения. Подключение проходит без ошибок. "Вижу" таблицы их поля в базе и т.д. Запрос вставил в кверю:
Возвращает 0 и запись не добавляется в талицу базы данных. Я так понимаю, что в ADO не обязательно явных управлений транзакциями? с ADO+MySQL первый раз столкнулся. Может я что не так делаю? Provider=MSDASQL.1;Password=пароль;Persist Security Info=True;User ID=юзверь;Mode=ReadWrite;Extended Properties="DRIVER={MySQL ODBC 5.1 Driver};юзверь;PWD=пароль;SERVER=сервер.com.ua;DATABASE=имя базы;PORT=3306;" Добавление записи через EMS SQL Manager проходит нормально. Добавлено @ 17:26 Добавил ещё одну кверю, к ней прикрутил DataSource с DBGrid`ом
пытаюсь открыть - ошибка:
|
| Автор: Akella 6.1.2009, 17:29 |
| А если к ADOQuery не подключен DataSource, то ADOQuery открываетя нормально. Такая же ошибка и с ADOTable |
| Автор: Akella 6.1.2009, 17:46 |
| После изменения я лезу в EMS SQL Manager и переоткрываю таблицу. Кверя возвращает 0, а по идее должна возвращать 1 в случае успешного ExecSQL |
| Автор: Dobermann 6.1.2009, 17:56 |
Ну а смысл переоткрывать таблицу, если в ADOTable/ADOQuery не изменены поля...2 раза по компоненту ADOTable/ADOQuery кликни, удали все поля, затем в контекстном меню выбери add all поля(уже не помню как там) |
| Автор: Данкинг 6.1.2009, 18:17 |
У меня такая ошибка была в следующей ситуации. Есть DBF-файл. В нем есть числовое поле длиной 4. В него запросом - не из моей программы, а из другой - вставляется число, цифр в котором больше, чем 4. Почему-то это проходит нормально, правда, не знаю, что именно вставляется при этом. Но когда после этого уже моя программа (через ADO, разумеется) пытается открыть эту таблицу, то вылезает такая вот ошибка, причём сама таблица открывается нормально, а ошибка вылезает на попытке получить AdoTable.Recordcount. С MySql не работал, поэтому ничего точно сказать не могу, но... |
| Автор: Dobermann 6.1.2009, 19:47 | ||
Да потому что ADOtable надо обновлять после всяких изменений! Воткнул в это делая курсовую... |
| Автор: Данкинг 6.1.2009, 19:53 | ||
Каких всяких изменений? Ошибка вылезает при первом же обращении к .recordcount, а моя прога в эту таблицу вообще никаких изменений не вносит, она только читает данные. |
| Автор: Dobermann 6.1.2009, 20:00 | ||
И при этом БД подключена к ADOtable?! |
| Автор: Данкинг 6.1.2009, 20:14 |
Ну да. Таблица, а не база. |
| Автор: Akella 6.1.2009, 21:25 | ||||||
ничё не понял, зачем мне поля?? мне нужно всего лишь добавить/изменить данные в базе, тянуть на клиента мне не требуется. Добавлено через 3 минуты и 22 секунды
отпадает, один и тот же скрипт работает в EMS и не работает в ADO Добавлено через 5 минут и 36 секунд
мне ничего обновлять не нужно, мне нужно 1. сделать запрос типа select count(*) from table where id = :id 2. если есть такая запись, то полностью заменить в ней все поля, если нету записи с таким ID, то вставить новую. ВСЁ Добавлено через 7 минут и 9 секунд Вобщем ещё будут соображения? |
| Автор: Akella 8.1.2009, 20:45 |
| Перехожу на ZeosDBO |
| Автор: СЭНСЭЙ 17.1.2009, 19:37 |
| Хочу работать с MySQL из Делфи, желательно 5 подскажите с чего начать. Если есть - дайте примеры |
| Автор: Akella 17.1.2009, 23:05 |
| Скачай AnyDac первой версии, она бесплатная. Там есть и доки и примеры. |
| Автор: flomaster 1.7.2009, 21:48 |
| WinXP SP2, Delphi 7, MySQL 5.0.67, MySQL ODBC 5.1 Driver База данных прописана в источниках данных BDEAdministrator. ADOConnection, строка подключения: Provider=MSDASQL.1;Persist Security Info=False;User ID=root;Data Source=mybase; Connected легко устанавливается в True. При создании строки CommandText в ADODataSet открывается редактор, видны списки таблиц, полей. Курсор clUseClient + ctDynamic. Штатно создается запрос. Например, "Select * from table". При попытке открыть набор выдается Error: "Поставщик данных или другая служба вернули состояние E_FAIL." При этом запрос с одним полем (ключевым) открывается нормально "Select id from table" В привязанном гриде отображаются строки со значениями ключа. С другим полем "select Name from table;" дает "состояние E_FAIL." При установке курсора clUseServer и любом CursorType получаю Error: Dataset does not support bookmarks, which are required for multi-record data controls. Zeos обязательно попробую, но хочу понять как открывать через ADO. Куда рыть? |
| Автор: flomaster 2.7.2009, 00:29 |
| Нашел еще хвост проблемы. При использовании SQLExplorer видны не все поля из таблиц, а только поля ключей и датовые. При указании всех этих полей запрос открывается. При указании любых других вылетает --------------------------- Error: Access violation at address 051D747A in module 'myodbc5.dll'. Read of address 00000000. Удивляет, что из консоли mysql.exe запросы работают по всем полям. Драйвер кривой или надо руки править? |
| Автор: Akella 2.7.2009, 11:11 |
| Забудь про ODBC, ставь ZeosDBO или AnyDAC |
| Автор: flomaster 2.7.2009, 14:50 |
| Zeos уже скачал. Просто хочу понять, что за х... И ведь у кого-то работает. Попробовал к другой базе подключаться - учебный пример с животными. Та же ботва - текстовые поля ни-ни. Даты - пожалста. Собственно весь расчет был на минимальные переделки, если переводитл с акцесса на серверную бд. Перекинуть Connection и подправить несовместимые запросы. пт |
| Автор: Akella 2.7.2009, 15:32 |
| Я тоже не разобрался. Может драйверы нужно настраивать. Короче без плясок с бубном не обойтись. |
| Автор: flomaster 3.7.2009, 00:42 |
| Испытал Zeos. Один и тот же набор данных нормально отрабатывает запрос и на акцессе и на мускуле. Что занятно, Zeos использует ту же мускульную библиотеку. Надо полагать, что проблема аналогична dbExpress - в плохой усвояемости новых драйверов мускула желудком ADO? |
| Автор: Akella 3.7.2009, 18:43 | ||
|