Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2014, 20:42   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А если запрос засунуть в ADOQuery в design-time какая реакция?
Еще вариант - чистить старые параметры перед присвоением в SQL. Попытка не пытка. Там должен быть метод для этого
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 17.02.2014 в 20:47.
Аватар вне форума Ответить с цитированием
Старый 17.02.2014, 20:48   #12
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Скорее всего Вы выкладываете не весь SQL-код. Такое обычно бывает, если без параметров используется строковое значение, которое содержит внутри себя двоеточие.
ReportCube вне форума Ответить с цитированием
Старый 18.02.2014, 16:25   #13
Muramidaza
Пользователь
 
Регистрация: 08.01.2014
Сообщений: 53
По умолчанию

[QUOTE=ReportCube;1342369]Скорее всего Вы выкладываете не весь SQL-код. Такое обычно бывает, если без параметров используется строковое значение, которое содержит внутри себя двоеточие.[/QUOTE

В общем психанул и создал еще одну базу данных из 1 таблицы про книги. Создал новое приложение и получил ту же ошибку.

Вот весь код нового приложения с той же самой ошибкой:

Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, ComCtrls, DB, ADODB, StdCtrls, ExtCtrls, DBCtrls,
  Mask;

type
  TForm1 = class(TForm)
    ADOConnection2: TADOConnection;
    DataSource2: TDataSource;
    ADOQuery2: TADOQuery;
    Button2: TButton;
    DBGrid2: TDBGrid;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin


  try
    ADOConnection2.Connected := False;
    ADOConnection2.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;User ID=root;Extended Properties="Driver=MySQL ODBC 5.1 Driver;SERVER=localhost;UID=root;DATABASE=biblioteka;PORT=3306;COLUMN_SIZE_S32=1"';
    ADOConnection2.Connected := True;
  except
    On e : EDatabaseError do
      MessageDlg('Error of connect to MySQL: ' + e.Message, mtError, [mbOK],0);
  end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin

  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Add('Select * from books while name = :fn');
  ADOQuery2.Parameters.ParamByName('fn').Value := Edit1.Text;
  ADOQuery2.Active:=True;
end;

end.
Не знаю уже что придумать
Muramidaza вне форума Ответить с цитированием
Старый 18.02.2014, 16:34   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Почти уверен, что name одно из зарезервированных слов в MySql. Или провайдеру не нравится. Что на это скажет, проверьте
Код:
Select * from `books` while `name` = :fn
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.02.2014, 16:44   #15
Muramidaza
Пользователь
 
Регистрация: 08.01.2014
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Почти уверен, что name одно из зарезервированных слов в MySql. Или провайдеру не нравится. Что на это скажет, проверьте
Код:
Select * from `books` while `name` = :fn
Поменял на другое - то же самое. Такое ощущение что натыкается на двоеточие
Muramidaza вне форума Ответить с цитированием
Старый 18.02.2014, 16:54   #16
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Только не WHILE а WHERE
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.02.2014, 17:00   #17
Muramidaza
Пользователь
 
Регистрация: 08.01.2014
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Только не WHILE а WHERE
Да - уже исправил. Спотыкается именно об строку с двоеточием
Muramidaza вне форума Ответить с цитированием
Старый 18.02.2014, 18:45   #18
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
Сообщение от Muramidaza Посмотреть сообщение
СУБД MySQL 5.5 ...
а если так:
Код:
SQL.Add('INSERT INTO firm (FirmName, Address, JurAddress, Phone1, Phone2, Fax, Email, Site, OGRN, INN, OKPO, Bank, RS, KS, BIK)');
SQL.Add(' VALUES(?fm, ?adr, ?jadr, ?ph1, ?ph2, ?fx, ?em, ?st, ?ogrn, ?inn, ?okpo, ?bk, ?rs, ?ks, ?bik)');
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 18.02.2014, 19:53   #19
Muramidaza
Пользователь
 
Регистрация: 08.01.2014
Сообщений: 53
По умолчанию

Вопросы вместо двоеточий тоже не катят.
Создал отдельное приложение и базу данных с одной таблицей - код приводил выше. Вылезала та же самая ошибка.

Очень много чего перерыл и пришел к тому что если в строке инициализации АДОконнектион вставить вначале User ID=root то ошибка пропадает и параметры принимаются нормально.

Т. е. было
ConnectionString =
'Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="Driver=MySQL ODBC 5.1 Driver;SERVER=localhost;UID=root;DA TABASE=biblioteka;PORT=3306"'

Стало:
ConnectionString =
'Provider=MSDASQL.1;Persist Security Info=False;User ID=root;Extended Properties="Driver=MySQL ODBC 5.1 Driver;SERVER=localhost;UID=root;DA TABASE=biblioteka;PORT=3306"'

Подтвердил это несколько раз добавляя и убирая этот параметр - ошибка появлялась и исчезала.

Обычные запросы к базе данных работали в том и другом случае!!!

Почему то не получается этот фокус с основной базой данных.

Что это за параметр и где он настраивается в самой СУБД?

Этот параметр не формировался при сборке строки. И в основной базе данных его тоже не было сначала. Когда вручную добавил с экспериментальной базой данных - все заработало. Когда попробовал с основной - ничего не получилось...

Последний раз редактировалось Muramidaza; 18.02.2014 в 19:55.
Muramidaza вне форума Ответить с цитированием
Старый 18.02.2014, 20:48   #20
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

С MySQL не работаю, но одно время предполагалось использование, но кануло в лето. Короче, когда консультировался со спецами категорически не рекомендовали использовать для доступа ADO. В основном по причине возможного геморроя, возможно в том числе и аналогичного этому случаю. Посмотрите в сторону MyDAC, UniDAC, Zeos. Наверно и другие есть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с параметром в запросе ADOQuery akramar БД в Delphi 5 11.05.2013 22:03
Проблема с датой и с ADOquery Kamuist БД в Delphi 27 03.04.2013 20:40
Проблема с ADOQuery и Access hemn6vyr БД в Delphi 3 05.03.2013 18:37
проблема с запросом ADOQuery Kolya29 БД в Delphi 29 07.06.2010 20:38
[delphi] ADOQuery Проблема sPan4eZ БД в Delphi 14 17.09.2009 15:44