![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MySQLConnection ошибка Access Violation... [D7]
McLotos © (2013-01-12 00:07:00)Помогите разобраться, чего я тут такого не того намудрил
Есть форма, в которую забиваются данные для подключения к MySQL серверу, при клике по кнопке срабатывает процедура
procedure TForm1.bConnectClick(Sender: TObject);
var
Server,Login,Passw: PAnsiChar;
begin
Server := PAnsiChar(eServer.Text);
Login := PAnsiChar(eLogin.Text);
Passw := PAnsiChar(ePassw.Text);
SQLConnector.SQLConnection.Connect(Server,Login,Passw);
SQLConnector.Connected := true;
end;
end.
Вот что здесь не так, почему этот код не работает? Ругается на строку
SQLConnector.SQLConnection.Connect(Server,Login,Passw);
я пробовал даже так
SQLConnector.SQLConnection.Connect(eServer.Text:PAnsiChar;eLogin.Text:PAnsiChar; ePassw.Text:PAnsiChar);
такой вариант компилятор не пропускает. что делать?
Плохиш (2013-01-14 01:21:00) [1]
> McLotos © (13.01.13 23:26) [19]
>
> > туда и подставляй.
>
> в строку? как? Мне нужно чтобы они вводились в форму при
> старте программы.
У TADOConnection имеется свойство Properties.
'Extended Properties' певдставляет собой строку разделённых пар "имя=значение".
McLotos (2013-01-13 23:46:00) [2]буду возиться, посмотрим что получится. спасибо.
DVM (2013-01-13 23:39:00) [3]
> McLotos © (13.01.13 23:34) [20]
> как-то так?
да
DVM (2013-01-13 23:38:00) [4]
> McLotos © (13.01.13 23:26) [19]
>
> > туда и подставляй.
>
> в строку? как?
Да примерно так же как у тебя там выше было:
var
Query: TADODataSet;
begin
Query := TADODataSet.Create(nil);
try
Query.ConnectionString := ConnectionString;
Query.CommandText := SQL;
Query.Active := True;
.....
finally
Query.Free;
end;
end;
вид строки подключения для MySQL можно в интернет посмотреть, соответственно вместо TADODataSet можно взять TAdoConnection.
McLotos (2013-01-13 23:34:00) [5]кажись дошло
qry1.ConnectionString(
Provider=MSDASQL.1;
Persist Security Info=False;
Extended Properties="Driver=MySQL ODBC 5.2w Driver;
SERVER="+eServer.Text+";
UID="+eUser.Text+";
DATABASE="+eBase.Text+";
PORT="+ePort.Text+"");
как-то так?
McLotos (2013-01-13 23:26:00) [6]
> туда и подставляй.
в строку? как? Мне нужно чтобы они вводились в форму при старте программы. Т.е. сама программа не запустится пока не подключится к БД, а чтобы она подключилась нужно в форму указать адрес сервера, имя БД, логин и пароль юзверя БД
DVM (2013-01-13 22:55:00) [7]
> McLotos © (13.01.13 22:27) [17]
> Zeos так и не получилось нормально поставить, вроде делал
> все по инструкции. а все-равно вкладка не появлялась.
да вроде нормально там ставится, вероятно где то ошибся все же.
> В общем сделал через ADO
> только вот теперь не могу понять как сделать чтобы данные
> для подключения запрашивались из формы
В адо параметры подключения, в.т.ч логин пароль в строке подключения обычно фигурируют, туда и подставляй.
McLotos (2013-01-13 22:27:00) [8]Zeos так и не получилось нормально поставить, вроде делал все по инструкции. а все-равно вкладка не появлялась.
В общем сделал через ADO, думаю это не худший вариант, и код получился всего в 3 строчки =)
procedure TForm1.btn1Click(Sender: TObject);
begin
try
with qry1 do
begin
SQL.Clear;
SQL.Add('SELECT * FROM access');
Active:=True;
ShowMessage(IntToStr(RecordCount));
end;
except
on e:Exception do
end;
end;
только вот теперь не могу понять как сделать чтобы данные для подключения запрашивались из формы, как в первоначальном варианте.
DVM (2013-01-12 15:54:00) [9]
> McLotos © (12.01.13 15:35) [14]
> ок. практически всё понятно, непонятно только одно, как
> это решить.
попробуй Zeos http://sourceforge.net/projects/zeoslib/files/?source=navbar
McLotos (2013-01-12 15:39:00) [10]а где модератор?
плииииз можно дописать в название темы описание второй появившейся ошибки? dbExpress Error:Invalid Precision
McLotos (2013-01-12 15:35:00) [11]ок. практически всё понятно, непонятно только одно, как это решить.
Сначала нашёл что delphi7 не умеет работать с MySQL старше 3 версии, подружил их при помощи библиотеки, теперь выскакивает эта странная ошибка, о которой в Интернет информации никакой.
Что посоветуете?
DVM (2013-01-12 15:20:00) [12]
> Anatoly Podgoretsky © (12.01.13 15:16) [11]
> Обычная проблема для dbexpress и MySql
Новые версии (xe и новее) без проблем подключаются, чаще проблема не в самом dbExpress а в несовпадении версий клиентской библиотеки и сервера, а также в разрешениях на самом сервере для удаленных подключений.
DVM (2013-01-12 15:20:00) [13]
> Anatoly Podgoretsky © (12.01.13 15:16) [11]
> Обычная проблема для dbexpress и MySql
Новые версии (xe и новее) без проблем подключаются, чаще проблема не в самом dbExpress а в несовпадении версий клиентской библиотеки и сервера, а также в разрешениях на самом сервере для удаленных подключений.
Anatoly Podgoretsky (2013-01-12 15:16:00) [14]
> Я достаточно долго долбался с удалённым подключением
Обычная проблема для dbexpress и MySql
McLotos (2013-01-12 14:57:00) [15]библиотеки все доступны, лежат рядом с проектом.
DVM (2013-01-12 14:22:00) [16]
> McLotos (12.01.13 12:30) [7]
по поводу старых версий DbExpress ничего сказать не могу, он сильно эволюционировал со времен D7, даже параметры изменились.
Указанные в параметрах подключения библиотеки все доступны программе?
Тут еще принципиальный момент, если не ошибаюсь:
> Params.Clear;
McLotos (2013-01-12 12:32:00) [17]DVM =)
когда писал пост не видел Ваши ответы, почти дублирование получилось =)
McLotos (2013-01-12 12:30:00) [18]В общем переделал код, это вызвало другую ошибку, что уже радует.
dbExpress Error:Invalid Precision
[off]наличие сигнала об ошибке лучше чем его отсутствие =)[/off]
немного об именовании переменных
ePass,eHost и т.д. это edit
lPass,lHost и т.д. это label
procedure TForm1.bConnectClick(Sender: TObject);
var
SQLConnector:TSQLConnection;
begin
SQLConnector:= TSQLConnection.Create(nil);
SQLConnector.DriverName := 'dbxmysql';
SQLConnector.GetDriverFunc := 'getSQLDriverMYSQL50';
SQLConnector.LibraryName := 'dbxopenmysql50.dll';
SQLConnector.VendorLib := 'libmysql.dll';
SQLConnector.Params.Append('Database=' + eBase.Text);
SQLConnector.Params.Append('User_Name=' + eUser.Text);
SQLConnector.Params.Append('Password=' + ePass.Text);
SQLConnector.Params.Append('HostName=' + eHost.Text);
SQLConnector.Open;
end;
end;
DVM (2013-01-12 11:33:00) [19]
> McLotos
если TSQLConnection создается не runtime, то соответственно все эти параметры в свойствах компонента указать надо.
DVM (2013-01-12 11:31:00) [20]
> McLotos (12.01.13 10:01) [4]
> dbExpress
FConn := TSQLConnection.Create(nil);
with FConn do
begin
ConnectionName := 'MySQLConnection';
DriverName := 'MySQL';
GetDriverFunc := 'getSQLDriverMYSQL';
LibraryName := 'Dbxmys.dll';
LoginPrompt := False;
VendorLib := 'libmysql.dll';
Params.Clear;
Params.Add('DriverName=MySQL');
Params.Add('HostName=' + Settings.DBHost);
Params.Add('Database=' + Settings.DBName);
Params.Add('User_Name=' + Settings.DBUser);
Params.Add('Password=' + Settings.DBPassword);
Params.Add('BlobSize=-1');
Params.Add('ServerCharSet=utf8');
end;
именно так и никак иначе.
и все указанные библиотеки должны лежать в каталоге программы и версия клиентской библиотеки mysql должна быть не ниже а лучше такой же как версия сервера.