Последняя версия DataExpress 3 beta от 12 февраля 2020 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Песочница
ИзображениеИзображениеИзображение

Возможность соединения DE и базы данных сайта на mysql

Взаимодействие DataExpress с операционной системой, другими приложениями и сервисами.
jurist23rus
Эксперт
Сообщения: 2677
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 17 раз

Re: Возможность соединения DE и базы данных сайта на mysql

Сообщение jurist23rus » Вт июн 18, 2019 5:21 pm

Я думал, что пробную базу MySQL сделает вы, а нам останется только попробовать подключиться и разобраться с вылетом, если он есть.
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
Develop-Soft
Сообщения: 1234
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 114 раз
Поблагодарили: 292 раза
Контактная информация:

Re: Возможность соединения DE и базы данных сайта на mysql

Сообщение Develop-Soft » Вт июн 18, 2019 6:46 pm

Xen писал(а):У меня 64-битная система, но всё заработало, когда поставил обе версии коннектора (x86 и x64).

Удалите x64.
Xen писал(а):Если база находится на удалённом сервере, то скорее всего там стандартный порт 3306 закрыт извне, нужно либо подключаться по SSH через тоннель Putty, либо проситься у техподдержки добавить ваш IP адрес в исключение (справедливо для "белого" постоянного IP), либо выложить сайт на свой сервер :D

Или не париться с коннекторами и ограничениями провайдера, а запилить скрипт на php (если речь о веб-хостинге с мускулем) и работать через http (https).

Аватара пользователя
admin
Разработчик
Сообщения: 4707
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 23 раза
Поблагодарили: 192 раза

Re: Возможность соединения DE и базы данных сайта на mysql

Сообщение admin » Вт июн 18, 2019 10:54 pm

RS.Close в 19 строке причина вылета. RS.Open вызывает какое-то исключение (у меня "table ... doesn;t exists"), управление передается в блок except. Затем уже RS.Close вызывает исключение "операция не допускается, если объект закрыт" и программа вылетает. Надо убрать RS.Close. Все равно нет смысла закрывать набор, если он не открыт.

Xen
Новичок
Сообщения: 14
Зарегистрирован: Пт мар 23, 2018 10:20 am
Благодарил (а): 2 раза

Re: Возможность соединения DE и базы данных сайта на mysql

Сообщение Xen » Ср июн 19, 2019 8:06 am

Закомментировал строки с .Close, все равно вылетает, но теперь с ошибками.
pic1.jpg
pic1.jpg (54.93 КБ) 865 просмотров
pic2.jpg
pic2.jpg (47.29 КБ) 865 просмотров

Аватара пользователя
admin
Разработчик
Сообщения: 4707
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 23 раза
Поблагодарили: 192 раза

Re: Возможность соединения DE и базы данных сайта на mysql

Сообщение admin » Ср июн 19, 2019 9:53 am

Это на тестовой базе testsql?

Аватара пользователя
Develop-Soft
Сообщения: 1234
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 114 раз
Поблагодарили: 292 раза
Контактная информация:

Re: Возможность соединения DE и базы данных сайта на mysql

Сообщение Develop-Soft » Ср июн 19, 2019 10:46 am

Xen писал(а):Изображение

При работе с ODBC-коннекторами и некоторыми другими оле-компонентами поведение непредсказуемо. Можно нарваться на "Недостаточно памяти" или "Неопознанная ошибка" или "Работа завершена, давайте попробуем отладку" или окно как на скриншоте. Встречается такое поведения из-за несогласованности (как мне кажется) потока внутреннего движка и оле при использовании различных попыток "закрытия" (Close, Unassigned, Null).

Попробуйте такой вариант:

Код: Выделить всё

procedure ButtonClick(Sender: TObject);
   var Connect, RS: Variant;
 begin
 Connect := CreateOleObject('ADODB.Connection');
   try
    Connect.open(
    'DRIVER={MySQL ODBC 8.0 Unicode Driver};'+
    'SERVER=localhost;'+
    'PORT=3306;'+
    'DATABASE=local;'+
    'UID=root;'+
    'PWD=root'
    );
    MsgBox('',   'Связь с базой установлена!');
      try
      RS := CreateOleObject('ADODB.Recordset');
      RS.Open('SELECT * FROM `test_table`', Connect);
      while  RS.EOF = 0 do
        begin
          debug(RS.Fields('f2').Value+#9+RS.Fields('f3').Value);
          RS.MoveNext;
        end;
      except;
        debug ('Проблемы с выполнением запроса к SQL серверу: "'+ExceptionParam+'"');
      end;
  except;
    MsgBox('',   'Отсутствует связь с базой!');
    Debug(ExceptionParam);
    ////////// Под вопросом ///////////////////////////////////
     finally
        try RS.Close; except end;
        try RS:=Unassigned;  except end;
        try Connect.Close; except end;
        try Connect:=Unassigned; except end;
   //////////////////////////////////////////////////////////// 
  end;
end;

procedure Form_Create;
begin
  dxButton1.OnClick := @ButtonClick;
end;

Xen
Новичок
Сообщения: 14
Зарегистрирован: Пт мар 23, 2018 10:20 am
Благодарил (а): 2 раза

Re: Возможность соединения DE и базы данных сайта на mysql

Сообщение Xen » Ср июн 19, 2019 11:06 am

Да, на тестовой test_sql

Аватара пользователя
Develop-Soft
Сообщения: 1234
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 114 раз
Поблагодарили: 292 раза
Контактная информация:

Re: Возможность соединения DE и базы данных сайта на mysql

Сообщение Develop-Soft » Ср июн 19, 2019 2:38 pm

Относительно стабильный вариант:

Код: Выделить всё

var T:TTimer;

procedure ButtonClick(Sender: TObject);
   var Connect, RS: Variant;

 begin
 if T<>nil then
 T.Enabled:=false;
   try
    Connect := CreateOleObject('ADODB.Connection');
    Connect.open(
    'DRIVER={MySQL ODBC 8.0 Unicode Driver};'+
    'SERVER=localhost;'+
    'PORT=3306;'+
    'DATABASE=local;'+
    'UID=root;'+
    'PWD=root'
    );
    debug('Соединение установлено');
   except
    debug('Ошибка соединения:'+#13#10+ExceptionParam)
   end;
   if Connect.State=0 then exit;
      try
      RS := CreateOleObject('ADODB.Recordset');
      RS.Open('SELECT * FROM `test_table`', Connect);
      while  RS.EOF = 0 do
        begin
          debug(RS.Fields('f2').Value+#9+RS.Fields('f3').Value);
          RS.MoveNext;
        end;
       RS.Close;
      except;
        debug ('Ошибка SQL запроса: "' +ExceptionParam+'"');
      end;
 try Connect:=Unassigned except;debug(ExceptionParam);end;
 try RS:=Unassigned except;end;
end;

procedure RT(Sender: TObject);
begin
   if T=nil then
   T:=TTimer.Create(Self);
   T.Interval:=1;
   T.OnTimer:=@ButtonClick;
   T.Enabled:=true;
end;

procedure Form_Create;
begin
  // dxButton1.OnClick := @ButtonClick
   dxButton1.OnClick := @RT; // "разморозка".
end;

Xen
Новичок
Сообщения: 14
Зарегистрирован: Пт мар 23, 2018 10:20 am
Благодарил (а): 2 раза

Re: Возможность соединения DE и базы данных сайта на mysql

Сообщение Xen » Ср июн 19, 2019 2:50 pm

Этот вариант сработал, спасибо огромное!