Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.09.29;
Скачать: CL | DM;

Вниз

MySQLConnection ошибка Access Violation...   Найти похожие ветки 

 
McLotos   (2013-01-12 00:07) [0]

Помогите разобраться, чего я тут такого не того намудрил
Есть форма, в которую забиваются данные для подключения к 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-12 01:28) [1]


>
> McLotos   (12.01.13 00:07)
>
> Помогите разобраться, чего я тут такого не того намудрил

Тут ничего. Где-то в другом месте чего-то не было сделано вовремя. Одно могу сказать точно. Причина AV никак не связана с параметрами процедуры Connect. И скорее всего она связана либо с SQLConnector, либо с SQLConnection. И поскольку я не знаю что такое SQLConnector, то мне больше нечего сказать.


 
AlexDn ©   (2013-01-12 02:49) [2]

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


 
KilkennyCat ©   (2013-01-12 04:08) [3]

а что-то типа коннекшион нэйм или тип разве не надо указывать? да и версии клиента и сервера могут быть несовместимыми (я бы с этого начал проверку).


 
McLotos   (2013-01-12 10:01) [4]

Германн, но программа же матерится именно на этот участок, хотя как вариант могу проверить правильность передаваемых переменных, но не думаю что это чо-то даст.
SQLConnector ни что иное как SQLConnector:TSQLConnection закладки dbExpress

AlexDn я тоже использую только стандартные компоненты.

KilkennyCat а что, это мысль, где-то на просторах Интернет я наткнулся как-то на мысль, что Delphi работает не со всеми версиями MySQL, тогда возникает вопрос, как заставить её работать именно с этой версией, или может проще найти ту с которой она сможет работать.


 
DVM ©   (2013-01-12 11:31) [5]


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


 
DVM ©   (2013-01-12 11:33) [6]


> McLotos

если TSQLConnection создается не runtime, то соответственно все эти параметры в свойствах компонента указать надо.


 
McLotos   (2013-01-12 12:30) [7]

В общем переделал код, это вызвало другую ошибку, что уже радует.
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;


 
McLotos   (2013-01-12 12:32) [8]

DVM =)
когда писал пост не видел Ваши ответы, почти дублирование получилось =)


 
DVM ©   (2013-01-12 14:22) [9]


> McLotos   (12.01.13 12:30) [7]

по поводу старых версий DbExpress ничего сказать не могу, он сильно эволюционировал со времен D7, даже параметры изменились.

Указанные в параметрах подключения библиотеки все доступны программе?

Тут еще принципиальный момент, если не ошибаюсь:


>  Params.Clear;


 
McLotos ©   (2013-01-12 14:57) [10]

библиотеки все доступны, лежат рядом с проектом.


 
Anatoly Podgoretsky ©   (2013-01-12 15:16) [11]


> Я достаточно долго долбался с удалённым подключением

Обычная проблема для dbexpress и MySql


 
DVM ©   (2013-01-12 15:20) [12]


> Anatoly Podgoretsky ©   (12.01.13 15:16) [11]


> Обычная проблема для dbexpress и MySql

Новые версии (xe и новее) без проблем подключаются, чаще проблема не в самом dbExpress а в несовпадении версий клиентской библиотеки и сервера, а также в разрешениях на самом сервере для удаленных подключений.


 
DVM ©   (2013-01-12 15:20) [13]


> Anatoly Podgoretsky ©   (12.01.13 15:16) [11]


> Обычная проблема для dbexpress и MySql

Новые версии (xe и новее) без проблем подключаются, чаще проблема не в самом dbExpress а в несовпадении версий клиентской библиотеки и сервера, а также в разрешениях на самом сервере для удаленных подключений.


 
McLotos ©   (2013-01-12 15:35) [14]

ок. практически всё понятно, непонятно только одно, как это решить.
Сначала нашёл что delphi7 не умеет работать с MySQL старше 3 версии, подружил их при помощи библиотеки, теперь выскакивает эта странная ошибка, о которой в Интернет информации никакой.
Что посоветуете?


 
McLotos ©   (2013-01-12 15:39) [15]

а где модератор?
плииииз можно дописать в название темы описание второй появившейся ошибки? dbExpress Error:Invalid Precision


 
DVM ©   (2013-01-12 15:54) [16]


> McLotos ©   (12.01.13 15:35) [14]


> ок. практически всё понятно, непонятно только одно, как
> это решить.

попробуй Zeos http://sourceforge.net/projects/zeoslib/files/?source=navbar


 
McLotos ©   (2013-01-13 22:27) [17]

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-13 22:55) [18]


> McLotos ©   (13.01.13 22:27) [17]


> Zeos так и не получилось нормально поставить, вроде делал
> все по инструкции. а все-равно вкладка не появлялась.

да вроде нормально там ставится, вероятно где то ошибся все же.


> В общем сделал через ADO


> только вот теперь не могу понять как сделать чтобы данные
> для подключения запрашивались из формы

В адо параметры подключения, в.т.ч логин пароль в строке подключения обычно фигурируют, туда и подставляй.


 
McLotos ©   (2013-01-13 23:26) [19]


> туда и подставляй.

в строку? как? Мне нужно чтобы они вводились в форму при старте программы. Т.е. сама программа не запустится пока не подключится к БД, а чтобы она подключилась нужно в форму указать адрес сервера, имя БД, логин и пароль юзверя БД


 
McLotos ©   (2013-01-13 23:34) [20]

кажись дошло

   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+"");

как-то так?


 
DVM ©   (2013-01-13 23:38) [21]


> 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.


 
DVM ©   (2013-01-13 23:39) [22]


> McLotos ©   (13.01.13 23:34) [20]


> как-то так?

да


 
McLotos ©   (2013-01-13 23:46) [23]

буду возиться, посмотрим что получится. спасибо.


 
Плохиш ©   (2013-01-14 01:21) [24]


> McLotos ©   (13.01.13 23:26) [19]
>
> > туда и подставляй.
>
> в строку? как? Мне нужно чтобы они вводились в форму при
> старте программы.

У TADOConnection имеется свойство Properties.
"Extended Properties" певдставляет собой строку разделённых пар "имя=значение".



Страницы: 1 вся ветка

Текущий архив: 2013.09.29;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.007 c
15-1366093232
Y-
2013-04-16 10:20
2013.09.29
Какой самый лучши процессор у Intel?


15-1366108175
x86
2013-04-16 14:29
2013.09.29
Покупка code-signing сертификата


15-1366230602
Юрий
2013-04-18 00:30
2013.09.29
С днем рождения ! 18 апреля 2013 четверг


8-1186063409
leonidus
2007-08-02 18:03
2013.09.29
Конвертирование BMP в GIF


2-1358163221
McLotos
2013-01-14 15:33
2013.09.29
Аргументы имеют неверный тип, выходят за пределы допустимого...