Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > ADO + MySQL + ODBC


Автор: Akella 6.1.2009, 17:12
MySQL5, D2007, ADO, ODBC.
База живёт на хостинге (Joomla!1.5).
Установил дрова "MySQL ODBC 5.1". Соорудил строку подключения. Подключение проходит без ошибок. "Вижу" таблицы их поля в базе и т.д.
Запрос вставил в кверю:

Код

INSERT INTO 
  kvx_arenda
(
  ID
) 
VALUE (
  10
);


Код

  ShowMessage(IntToStr(toDS.ExecSQL));

Возвращает 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`ом
Код

SELECT * FROM kvx_arenda

пытаюсь открыть - ошибка:
Цитата

---------------------------
Error
---------------------------
Поставщик данных или другая служба вернули состояние E_FAIL.
---------------------------
OK   Details >>   
---------------------------

Автор: Akella 6.1.2009, 17:29
А если к ADOQuery не подключен DataSource, то ADOQuery открываетя нормально. Такая же ошибка и с ADOTable

Автор: Dobermann 6.1.2009, 17:36
Цитата(Akella @  6.1.2009,  17:29 Найти цитируемый пост)
А если к ADOQuery не подключен DataSource, то ADOQuery открываетя нормально. Такая же ошибка и с ADOTable

А ты после изменений ADOTable/ADOQuery обновлял?

Автор: Akella 6.1.2009, 17:46
После изменения я лезу в EMS SQL Manager и переоткрываю таблицу.
Кверя возвращает 0, а по идее должна возвращать 1 в случае успешного ExecSQL

Автор: Dobermann 6.1.2009, 17:56
Цитата(Akella @  6.1.2009,  17:46 Найти цитируемый пост)
После изменения я лезу в EMS SQL Manager и переоткрываю таблицу.

Ну а смысл переоткрывать таблицу, если в ADOTable/ADOQuery не изменены поля...2 раза по компоненту ADOTable/ADOQuery кликни, удали все поля, затем в контекстном меню выбери add all поля(уже не помню как там)

Автор: Данкинг 6.1.2009, 18:17
Цитата(Akella @  6.1.2009,  17:12 Найти цитируемый пост)
Поставщик данных или другая служба вернули состояние E_FAIL.

У меня такая ошибка была в следующей ситуации. Есть DBF-файл. В нем есть числовое поле длиной 4. В него запросом - не из моей программы, а из другой - вставляется число, цифр в котором больше, чем 4. Почему-то это проходит нормально, правда, не знаю, что именно вставляется при этом. Но когда после этого уже моя программа (через ADO, разумеется) пытается открыть эту таблицу, то вылезает такая вот ошибка, причём сама таблица открывается нормально, а ошибка вылезает на попытке получить AdoTable.Recordcount. 
С MySql не работал, поэтому ничего точно сказать не могу, но...

Автор: Dobermann 6.1.2009, 19:47
Цитата(Данкинг @  6.1.2009,  18:17 Найти цитируемый пост)
У меня такая ошибка была в следующей ситуации. Есть DBF-файл. В нем есть числовое поле длиной 4. В него запросом - не из моей программы, а из другой - вставляется число, цифр в котором больше, чем 4. Почему-то это проходит нормально, правда, не знаю, что именно вставляется при этом. Но когда после этого уже моя программа (через ADO, разумеется) пытается открыть эту таблицу, то вылезает такая вот ошибка, причём сама таблица открывается нормально, а ошибка вылезает на попытке получить AdoTable.Recordcount. 

Да потому что ADOtable надо обновлять после всяких изменений! Воткнул в это делая курсовую...

Автор: Данкинг 6.1.2009, 19:53
Цитата(Dobermann @  6.1.2009,  19:47 Найти цитируемый пост)
Да потому что ADOtable надо обновлять после всяких изменений! Воткнул в это делая курсовую... 

Каких всяких изменений? Ошибка вылезает при первом же обращении к .recordcount, а моя прога в эту таблицу вообще никаких изменений не вносит, она только читает данные.

Автор: Dobermann 6.1.2009, 20:00
Цитата(Данкинг @  6.1.2009,  19:53 Найти цитируемый пост)
Каких всяких изменений? Ошибка вылезает при первом же обращении к .recordcount, а моя прога в эту таблицу вообще никаких изменений не вносит, она только читает данные.

И при этом БД подключена к ADOtable?!

Автор: Данкинг 6.1.2009, 20:14
Цитата(Dobermann @  6.1.2009,  20:00 Найти цитируемый пост)
И при этом БД подключена к ADOtable?! 

Ну да. Таблица, а не база. smile 

Автор: Akella 6.1.2009, 21:25
Цитата(Dobermann @  6.1.2009,  17:56 Найти цитируемый пост)
Ну а смысл переоткрывать таблицу, если в ADOTable/ADOQuery не изменены поля...2 раза по компоненту ADOTable/ADOQuery кликни, удали все поля, затем в контекстном меню выбери add all поля(уже не помню как там)

ничё не понял, зачем мне поля?? мне нужно всего лишь добавить/изменить данные в базе, тянуть на клиента мне не требуется.

Добавлено через 3 минуты и 22 секунды
Цитата(Данкинг @  6.1.2009,  18:17 Найти цитируемый пост)
У меня такая ошибка была в следующей ситуации. Есть DBF-файл. В нем есть числовое поле длиной 4. В него запросом - не из моей программы, а из другой - вставляется число, цифр в котором больше, чем 4. 

отпадает, один и тот же скрипт работает в EMS и не работает в ADO

Добавлено через 5 минут и 36 секунд
Цитата(Dobermann @  6.1.2009,  19:47 Найти цитируемый пост)
Да потому что ADOtable надо обновлять после всяких изменений! Воткнул в это делая курсовую... 

мне ничего обновлять не нужно, мне нужно 
1. сделать запрос типа select count(*) from table where id = :id
2. если есть такая запись, то полностью заменить в ней все поля, если нету записи с таким ID, то вставить новую. ВСЁ

Добавлено через 7 минут и 9 секунд
Вобщем ещё будут соображения? smile 

Автор: Akella 8.1.2009, 20:45
Перехожу на ZeosDBO smile 

Автор: СЭНСЭЙ 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
Цитата(flomaster @  3.7.2009,  00:42 Найти цитируемый пост)
Надо полагать, что проблема аналогична dbExpress - в плохой усвояемости новых драйверов мускула желудком ADO?

 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)