Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибки при попытке подключения к MySQL. 
:(
    Опции темы
Mal Hack
Дата 12.11.2004, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Уже два часа юзаю поиск тут и на mysql.ru но ниче найьт не могу..
Трабла такая...
Используя dbExpress
создаю соединение с mysql SQLConnection1.
Вот код из DFM'a.
Код
 object SQLConnection1: TSQLConnection
   ConnectionName = 'MySQLConnection'
   DriverName = 'MySQL'
   GetDriverFunc = 'getSQLDriverMYSQL'
   LibraryName = 'dbexmysql.dll'
   Params.Strings = (
     'DriverName=MySQL'
     'HostName=127.0.0.1'
     'Database=lesson'
     'User_Name=root'
     'Password='
     'BlobSize=-1'
     'ErrorResourceFile='
     'LocaleCode=0000')
   VendorLib = 'libmysql.dll'

Дык вот, когда пытаюсь Active сделать = TRUE через инспектор объектов - получаю....
1. libmysql.dll not found. (Понапихал куда только можно... ив /bin и в папку с проектом и в c:/windows и /system32)...
2. Очищаю Vendorlib, получаю DLL/Shared Library name not set.
Пробовал и полные пути написать - та же фигня..

Как от всего этого избавиться понять никак нет могу...
С самим MySQL через PHP работаю уже года два.
С базами из Delphi работал только с 7 Paradox'ом...

Еще один такой момент...
В результате каких-то монипуляций иногда выскакивает еще одна вещь что-то типа "Невозможно загруить драйвер" (или функцию драйвера)...
PM ICQ   Вверх
<Spawn>
Дата 12.11.2004, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Используй компоненты ZeosAccess


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Mal Hack
Дата 12.11.2004, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



<Spawn>
Дело в том, что программу надо будет компилить на многих компах, гд возможно не удастся установить данное расширение...
(задание по практике в учеьном заведении).
Поэтому хочется обойтись стандартными средствами...
Цитата
Используй компоненты ZeosAccess

TMySQL это оно?
PM ICQ   Вверх
Kesh
Дата 13.11.2004, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



Mal Hack насколько я понял - нет... поищи ZeosDBO

http://www.zeoslib.net/


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 13.11.2004, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Если в этом покопаться, то можно рпзобраться.. Но повторюсь, надо сделатьна стандартном dbExpress'e...
Приложение - просто практика, никуда дальше не пойдет, поэтому надо сделать проще...
Все-таки инитересует вариант работы именно с dbExpress..
PM ICQ   Вверх
Mal Hack
Дата 14.11.2004, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Уф, ну и многих же людей я запряг со своей проблемой...
Итак, вопрос решился...
Рассказываю.
1. В папочку с проектом кладем libmySQL.dll от 3 версии MySQL, от 4 будет писать unable to load....
2. Предположим, что на форме есть 3 Edit'a для хоста, логина, пароля и базы.
3. Объявляем Connection: TSQLConnection.
4. При нажатии на кнопку соединения делаем..
Код
// Create Connection
Connection := TSQLConnection.Create(Application);
 with Connection do  
 begin  
   ConnectionName := 'Connection';  
   DriverName := 'MySQL';
   LibraryName := 'dbexpmysql.dll';
   VendorLib := 'libmySQL.dll';
   GetDriverFunc := 'getSQLDriverMYSQL';
   Params.Add( 'HostName=' + ConnectEditHost.Text );
   Params.Add( 'User_Name=' + ConnectEditUser.Text );
   Params.Add( 'Password=' + ConnectEditPass.Text );
   Params.Add( 'Database='  + ConnectEditBase.Text );
   LoginPrompt := TRUE;
   try
    Open;
   Except On Exception Do
    begin
     Application.MessageBox( 'К сожалению, соединиться с MySQL-сервером не удалось. Проверьте правильность ввода всех параметров.' , 'Ошибка соединения' , 0 );
     exit;
    end;
   end;
 end;

Все. К БД коннектиться... Дальше уже можно работать...

Есть еще два маленьких вопроса...
1. Соединение с базой лучше закрывать только при закрытии программы и открывать при открытии или проделывать эти операции перед выполнением каждого запроса?
Если все-таки лучше держать соединение открытым, то как во время работы программы проверить доступность сервера? Грубо говоря как mysql_ping() в PHP.
2. Как (оптимальнее и без возникновения ошибок) закрыть соединение...
Connection.Free;
DataSet.Free;
Этого будет достаточно?
PM ICQ   Вверх
Kesh
Дата 14.11.2004, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



1. Лучше кон6ечно держать соединение открытым во время работы программы... Т.к. выполнение подключения перед каждым запросом - трата времени и ресурсов...
Доступность сервера можно проверить по Connection.Connected...
2. Соединение закрывается по Connection.close... Делать Free перед закрытием программы не нужно, т.к. программа при закрытии его все равно выполнит...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 14.11.2004, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Спасибо (+1)
PM ICQ   Вверх
Mal Hack
Дата 14.11.2004, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Появляется вот такая ошибка на Open из предыдущего кода..
Раньше она появлялась на Закрытии приложения...
--Resize_Images_Alt_Text--
Что за ошибка?
PM ICQ   Вверх
Mal Hack
Дата 14.11.2004, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Я конечно дико извиняюсь, но...
От вышеупомянутого "счастья" избавился путем подмены libmySQL.dll
Но теперь вопрос в другом..
Как в:
Код

SQLDataSet := TSQLDataSet.Create( Application );
 with SQLDataSet do
  begin
   SQLConnection := Connection;
   CommandType := ctQuery;
   CommandText := 'INSERT INTO service_categories VALUES( "" , "text" ) ';
   DataSource := SQLDataSource;
   try
     Open;
   Except  On Exception do
    begin
     showmessage( '12' );
     exit;
    end;
   end;
  end;


Отловить именно момент, когда запрос не выполнился...
Поскольку при такой констркции: On Exception do (или EDataBaseError) shwmessage показывается в любом случае, даже если запрос выполняется.
PM ICQ   Вверх
Kesh
Дата 14.11.2004, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



А там разве ExecSQL нету?..
Добавлено @ 19:19
Оно вместо Open - Close используется для разовых инструкций...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Kesh
Дата 14.11.2004, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



Из Help по Delphi 8
Цитата
Executes a query or stored procedure that does not return a set of records.

Class
TSQLDataSet
Syntax

public function ExecSQL(ExecDirect: Boolean): Integer;


Description
Call ExecSQL to execute an SQL command that does not return a set of records. This command is a query other than a SELECT query, such as an INSERT, UPDATE, DELETE, or CREATE TABLE query.

ExecDirect indicates that the query does not need to be prepared before it is executed. This parameter can be set to true if the query does not include any parameters. When ExecDirect is false, the query will be prepared before it is executed. Even when ExecDirect is false, you can avoid preparing the query every time ExecSQL is called by setting the Prepared property to true before calling ExecSQL the first time.

ExecSQL returns the number of rows affected by the executed command. This becomes the value of the RowsAffected property.

Note: Do not use ExecSQL for commands that return data. These include any use of the ctTable command type, SELECT queries, and stored procedures that return a cursor. When the command returns data, use the Open method or set the Active property to true.





--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 14.11.2004, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Kesh есть-то он есть, н с ним в любом случае showmessage показывается...
PM ICQ   Вверх
Mal Hack
Дата 15.11.2004, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Путем проб и ошибок, осталось только одно...
При выполнении хоть Open, хоть ExecSQL, вылетает AccessViolation in address ... in module...
На сколько я понимаю это может быть из-за того, что я неправильно связал DataSet, DataSource и Grid..
Вот как делаю:
Код

SQLDataSet := TSQLDataSet.Create( Application );
 with SQLDataSet do
  begin
   Parent := MainForm;
   SQLConnection := Connection;
   CommandType := ctQuery;
  end;

SQLDataSource := TDataSource.Create( Application );
 with SQLDataSource do
  begin
   Parent := MainForm;
  end;

Grid := TDBGrid.Create( Application );
 with Grid do
  begin
   Parent := MainPanel;
    .............
  end;

SQLDataSet.DataSource := SQLDataSource;
SQLDataSet.CommandText := 'SELECT * FROM `service_categories`  LIMIT 0 , 30';
SQLDataSet.Open;// Access Violation

SQLDataSource.DataSet := SQLQuery;
Grid.DataSource := SQLDataSource;

Если в SQLDataSet.CommandText записать Inert ..., то запрос выполняется... Подрузомеваю, что выполняется и SELECT.
Но, на SQLDataSet.Open; выскакиват AccessViolation и дальше я так понимаю процедура не продолжается..
Посему вопросы:
1. Какие мои действия приводят к AccessViolation, или наоборот, чего не хватает.
2. Достаточно ли этих строк для отображения результата выполнения SELECT запроса в таблице..
PM ICQ   Вверх
<Spawn>
Дата 15.11.2004, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



В кмком модуле у тебя находятся компоненты доступа к БД? В каком участке кода пояляется AccessVioletion? Не в OnCreate главного модуля?

А как это могло скомпилиться :

Код

'SELECT * FROM `service_categories`  LIMIT 0 , 30';


Тебе нужно тут продублировать одинарные ковычки:

Код

'SELECT * FROM ''service_categories''  LIMIT 0 , 30';


Это сообщение отредактировал(а) <Spawn> - 15.11.2004, 05:32


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0946 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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