Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MySQLConnection ошибка Access Violation... [D7]


Страницы:   1 2

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 должна быть не ниже а лучше такой же как версия сервера.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо