Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка соединения Oracle MySQL и Delphi 7, Выдает ошибку синтаксиса SQL 
:(
    Опции темы
Paradoxal
Дата 15.6.2015, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.6.2015

Репутация: нет
Всего: нет



Доброго времени суток всем!
Никак не могу понять/найти причины ошибки.
Имею:
Delphi 7
MySQL 5.5.23 Community Server (GPL)
Связь через ADOConnection и ADOQuery
Листинг:
Код Delphi

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ExtCtrls, DB, ADODB, DBGrids, ComCtrls,
  ToolWin, ActnMan, ActnCtrls, ActnMenus, StdStyleActnCtrls, ActnList, Buttons,
  DBCtrls, Grids;
 
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    N1: TMenuItem;
    Connect1: TMenuItem;
    N2: TMenuItem;
    Exit1: TMenuItem;
    Panel1: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Edit4: TEdit;
    Button1: TButton;
    Button2: TButton;
    ADOConnection1: TADOConnection;
    DataSource1: TDataSource;
    ADOQuery1: TADOQuery;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    ComboBox1: TComboBox;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    DateTimePicker1: TDateTimePicker;
    TabSheet2: TTabSheet;
    DBGrid1: TDBGrid;
    TabSheet3: TTabSheet;
    ListBox1: TListBox;
    TabSheet4: TTabSheet;
    StringGrid1: TStringGrid;
    Close1: TMenuItem;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure Connect1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure TabSheet2Show(Sender: TObject);
    procedure TabSheet3Show(Sender: TObject);
    procedure Predmets;
    procedure Svodka_1;
    procedure MSConnect;
    procedure TabSheet4Show(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Close1Click(Sender: TObject);
    
  private
     { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  node: TTreeNode;
  DateTimePicker1: cardinal;
  Predmet: array of string;
  ID_Predmet: array of integer;
 
implementation
 
{$R *.dfm}
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
MSConnect;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
Panel1.Visible:=false;
end;
 
procedure TForm1.Exit1Click(Sender: TObject);
begin
ADOConnection1.Connected := false;
pagecontrol1.Visible := false;
connect1.Enabled := true;
exit1.Enabled := false;
end;
 
procedure TForm1.Connect1Click(Sender: TObject);
begin
Panel1.Visible:=true;
PageControl1.Visible:=False;
end;
 
procedure TForm1.MSConnect;
begin
Form1.ADOConnection1.Close;
ADOConnection1.ConnectionString := 'Provider = MSDASQL.1'+
';Password = ' + Edit3.Text +
';PersistSecurityInfo = False' +
';UserID = ' + Edit2.Text +
';DataSource = ' + Edit1.Text +
';InitialCatalog = ' + Edit4.Text;
try
ADOConnection1.Open;
except
ShowMessage('Не могу соединиться с базой данных!');
exit;
end;
panel1.Visible := false;
pagecontrol1.Height := form1.ClientHeight;
pagecontrol1.Width := form1.ClientWidth;
pagecontrol1.ActivePage := tabsheet1;
pagecontrol1.Visible := true;
connect1.Enabled := false;
exit1.Enabled := true;
Predmets;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
pagecontrol1.Visible := false;
pagecontrol1.Top:=0;
pagecontrol1.Left:=0;
panel1.Top:=10;
panel1.Left:=210;
dbgrid1.Parent:=tabsheet2;
dbgrid1.Top:=0;
dbgrid1.Left:=0;
dbgrid1.Height:=tabsheet2.ClientHeight;
dbgrid1.Width:=tabsheet2.ClientWidth;
StringGrid1.Cells[1,1]:='Успевают на';
StringGrid1.Cells[1,2]:='5';
StringGrid1.Cells[1,3]:='4-5';
StringGrid1.Cells[1,4]:='3-4-5';
StringGrid1.Cells[1,5]:='2';
StringGrid1.Cells[2,1]:='Количество';
StringGrid1.Cells[3,1]:='%';
end;
 
procedure TForm1.FormResize(Sender:TObject);
begin
pagecontrol1.Height:=form1.ClientHeight;
pagecontrol1.Width:=form1.ClientWidth;
end;
 
 
procedure TForm1.Button4Click(Sender: TObject);
begin
Edit10.Text:='';
Edit9.Text:='';
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from Anketa where fam ='+''''+Edit5.Text+'''');
ADOQuery1.Open;
ADOQuery1.First;
if ADOQuery1.Eof = true then
begin
ShowMessage('Данных об этом студенте нет');
exit;
end;
edit6.Text:=ADOQuery1.Fields[1].Value;
edit7.Text:=ADOQuery1.Fields[2].Value;
edit9.Text:=ADOQuery1.Fields[4].Value;
edit10.Text:=ADOQuery1.Fields[5].Value;
edit8.Text:=ADOQuery1.Fields[3].Value;
end;
 
procedure TForm1.TabSheet2Show(Sender:TObject);
begin
ADOQuery1.SQL.Clear;
if Edit10.Text = '' then
begin
ADOQuery1.SQL.Add('select fam as Фамилия, Imya as Имя, Otchestvo as Oтчество, data_rozd as Родился, id_gruppi as Группа from Anketa order by fam');
end
else
begin
ADOQuery1.SQL.Add('select fam as Фамилия, Imya as Имя, Otchestvo as Oтчество, data_rozd as Родился');
ADOQuery1.SQL.Add('select * from Anketa where id_gruppi ='+''''+Edit10.Text+'''');
ADOQuery1.SQL.Add('order by fam');
end;
ADOQuery1.Open;
end;
 
procedure TForm1.Svodka_1;
var
id_stud: array of integer;
i, j: integer;
num: array [2..5] of byte;
begin
for i:=2 to 3 do for j:=2 to 5 do StringGrid1.Cells[i,j]:=inttostr(0);
i:=0; j:=0;
ADOQuery1.SQL.Clear;
if edit10.Text = '' then ADOQuery1.SQL.Add('select id_stud from anketa')
else ADOQuery1.SQL.Add('select id_stud from anketa where id_gruppi ='+edit10.Text);
ADOQuery1.Open;
ADOQuery1.First;
while ADOQuery1.Eof = false do
begin
SetLength(ID_stud, i+1);
id_stud[i]:= ADOQuery1.Fields[0].Value;
inc(i);
ADOQuery1.Next;
end;
StringGrid1.Cells[1,0]:= 'Группа'+Edit10.Text;
StringGrid1.Cells[3,0]:= 'Количество студентов - '+inttostr(length(id_stud));
for i:=0 to length(id_stud) - 1 do
begin
for j:=2 to 5 do num[j]:=0;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select ocenka from uspevaemost where');
ADOQuery1.SQL.Add('id_stud = '+IntToStr(id_stud[i]));
ADOQuery1.Open;
ADOQuery1.First;
while ADOQuery1.Eof = false do
begin
case ADOQuery1.Fields[0].Value of
2: inc(num[2]);
3: inc(num[3]);
4: inc(num[4]);
5: inc(num[5]);
end;
ADOQuery1.Next;
end;
for j:=2 to 5 do if num[j]>0 then
begin
StringGrid1.Cells[2,7-j]:= IntToStr(StrToInt(StringGrid1.Cells[2,7-j])+1);
break;
end;
end;
for i:=2 to 5 do StringGrid1.Cells[3,i]:=FormatFloat('0.00',(StrToInt(StringGrid1.Cells[2,i])/length(id_stud))*100);
end;
 
procedure TForm1.Predmets;
var
i: integer;
begin
i:=0;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from Predmet order by id_predm');
ADOQuery1.Open;
ADOQuery1.First;
while ADOQuery1.Eof = false do
begin
SetLength(Predmet,i+1);
SetLength(ID_Predmet,i+1);
ID_Predmet[i]:= ADOQuery1.Fields[0].Value;
Predmet[i]:= ADOQuery1.Fields[1].Value;
combobox1.Items.Add(Predmet[i]);
inc(i);
ADOQuery1.Next;
end;
end;
 
procedure TForm1.Button5Click(Sender: TObject);
begin
if edit5.Text = '' then exit;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Add('select * from Anketa where fam ='+''''+Edit5.Text+'''');
ADOQuery1.SQL.Add('and imya = '+''''+Edit6.Text+'''');
ADOQuery1.SQL.Add('and otchestvo = '+''''+Edit7.Text+'''');
ADOQuery1.Open;
ADOQuery1.First;
if ADOQuery1.Eof = false then
begin
ShowMessage('Студент с такой фамилией, именем и отчеством уже существует');
exit;
end;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select id_stud from anketa order by id_stud');
ADOQuery1.Open;
ADOQuery1.Last;
edit9.Text:=IntToStr(ADOQuery1.Fields[0].Value+1);
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into Anketa values(');
ADOQuery1.SQL.Add(''''+Edit5.Text+''''+',');//фамилия
ADOQuery1.SQL.Add(''''+Edit6.Text+''''+',');//имя
ADOQuery1.SQL.Add(''''+Edit7.Text+''''+',');//отчество
ADOQuery1.SQL.Add(''''+Edit8.Text+''''+',');//дата рождения
ADOQuery1.SQL.Add(Edit9.Text+',');//id студента
ADOQuery1.SQL.Add(Edit10.Text+')');//группа
try
ADOQuery1.ExecSQL;
except
edit9.Text:='';
ShowMessage('Не могу записать данные, проверьте правильность ввода');
exit;
ShowMessage('Запись добавлена');
end;
end;
 
procedure TForm1.TabSheet3Show(Sender:TObject);
var
j:integer;
begin
listbox1.Clear;
listbox1.Items.Add('Оценки за '+''''+FormatDateTime('dd.mm.yyyy', DateTimePicker1.Date)+'''');
j:=0;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select ocenka, id_predm from uspevaemost where id_stud = '+Edit9.Text);
ADOQuery1.SQL.Add('and data_ocenki = '+''''+FormatDateTime('mm.dd.yyyy',DateTimePicker1.Date)+'''');
ADOQuery1.SQL.Add('order by id_predm');
ADOQuery1.Open;
ADOQuery1.First;
while ADOQuery1.Eof = false do
begin
for j:=0 to length(predmet)-1 do if ADOQuery1.Fields[1].Value= ID_Predmet[j] then break;
listbox1.Items.Add(predmet[j]+'-'+IntToStr(ADOQuery1.Fields[0].Value));
ADOQuery1.Next;
end;
end;
 
procedure TForm1.TabSheet4Show(Sender:TObject);
begin
Svodka_1;
end;
 
procedure TForm1.Button6Click(Sender: TObject);
begin
if edit11.Text = '' then exit;
if combobox1.Text = '' then exit;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select ocenka from uspevaemost where id_stud = '+Edit9.Text);
ADOQuery1.SQL.Add('and data_ocenki = '+''''+FormatDateTime('mm.dd.yyyy',DateTimePicker1.Date)+'''');
ADOQuery1.SQL.Add('and id_predm = '+IntToStr(ID_Predmet[combobox1.ItemIndex]));
ADOQuery1.Open;
ADOQuery1.First;
if ADOQuery1.Eof = false then
begin
ShowMessage('Оценка уже существует');
exit;
end;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Add('insert into uspevaemost values(');
ADOQuery1.SQL.Add(Edit11.Text+',');//оценка
ADOQuery1.SQL.Add(Edit9.Text+',');//id студента
ADOQuery1.SQL.Add(IntToStr(ID_Predmet[combobox1.ItemIndex])+',');//id предмета
ADOQuery1.SQL.Add(Edit10.Text+',');//группа
ADOQuery1.SQL.Add(''''+FormatDateTime('mm.dd.yyyy',DateTimePicker1.Date)+''''+')');//дата
try
ADOQuery1.ExecSQL;
except
ShowMessage('Данные не внесены');
exit;
end;
ShowMessage('Оценка внесена');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
edit5.Text:='';
edit6.Text:='';
edit7.Text:='';
edit8.Text:='';
edit9.Text:='';
edit10.Text:='';
end;
 
procedure TForm1.Close1Click(Sender: TObject);
begin
Application.Terminate;
end;
 
end.
 smile 
ConnectionString и всё остальное (ADO) вроде как настроил по многочисленным туториалам и советам на просторах www. Но программа всё еще наотрез отказывается подключаться к БД. Строка подключения выглядит так (последний вариант, предыдущий был короче, но все равно не работал): Provider=MSDASQL.1;Password=(мой пароль);Persist Security Info=True;User ID=root;Extended Properties="DSN=MySQL;SERVER=localhost;UID=root;PWD=(мой пароль)ATABASE=studn;PORT=3306";Initial Catalog=studn  smile 
Я поставил неверные драйвера? Либо дело еще в чем? Ругается на синтаксис в строке подключения при попытке выставить в ADOQuery в object inspector атрибут Active: True
PM MAIL   Вверх
Antimol
Дата 16.6.2015, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 28.7.2007
Где: Украина, Киев

Репутация: 4
Всего: 4



Возможно ошибка в:
(мой пароль);DATABASE=studn;

Можно еще создать файл с расширением *.udl - потом кликнуть на него 2 раза - откроется окно настройки подключения. Настраиваете и сохраняете, там же можно проверить подключение. Если все хорошо - потом то же файл можно открыть на редактирование в блокноте и скопировать строку подключения.

Это сообщение отредактировал(а) Antimol - 16.6.2015, 09:33
--------------------
Лучшее спасибо это "+" к репутации.   Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи....
PM MAIL WWW ICQ   Вверх
Paradoxal
Дата 16.6.2015, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.6.2015

Репутация: нет
Всего: нет



Antimol, спасибо за ответ. Попробовал. Через файл с .udl все отлично получается. Копирую строку, вылазит ошибка : [MySQL][ODBC 5.3(w) Driver][mysqld-5.5.23]You have an error in your SQL syntax; check ну и т.д... 'Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=''DSN=MySQL;SE' at line 1.
А почему ошибка может быть в (мой пароль);DATABASE=studn;? Что там не так?

Это сообщение отредактировал(а) Paradoxal - 16.6.2015, 19:50
PM MAIL   Вверх
Antimol
Дата 16.6.2015, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 28.7.2007
Где: Украина, Киев

Репутация: 4
Всего: 4



Вы просто написали:

PWD=(мой пароль)ATABASE

Кстати попробуйте активировать AdoConnection а не AdoQuery. Если все будет ОК - значит в ADOQuery некорректный запрос. 

Это сообщение отредактировал(а) Antimol - 16.6.2015, 21:43
--------------------
Лучшее спасибо это "+" к репутации.   Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи....
PM MAIL WWW ICQ   Вверх
Paradoxal
Дата 17.6.2015, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.6.2015

Репутация: нет
Всего: нет



Antimol, все так. В ADOConnection все нормально, в ADOQuery ругается. Но я, хоть убейте, не могу понять, где и в каком запросе ошибка. 


Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Ошибка.jpg 444,79 Kb
PM MAIL   Вверх
Antimol
Дата 17.6.2015, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 28.7.2007
Где: Украина, Киев

Репутация: 4
Всего: 4



Я могу только сказать что нужно отлаживать.

Ошибка может быть из за неправильного количества знаков ''' в передаваемых параметрах:
Код

   ADOQuery1.SQL.Add('select * from Anketa where id_gruppi =' + '''' +      Edit10.Text + '''');


Если хотите чтобы не было проблем с параметрами - начните ими правильно пользоваться:
Например:
Код

    ADOQuery1.SQL.Text := 'select * from Anketa where id_gruppi = :Param1';
    ADOQuery1.Parameters.ParamByName('Param1').Value :=  Edit10.Text;


Думаю принцип понятен.

Это сообщение отредактировал(а) Antimol - 17.6.2015, 21:41
--------------------
Лучшее спасибо это "+" к репутации.   Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи....
PM MAIL WWW ICQ   Вверх
Paradoxal
Дата 21.6.2015, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.6.2015

Репутация: нет
Всего: нет



Принцип понятен. Но все равно не помогает. Та же ошибка, что и раньше. В построении connection string для MySQL server 5.5.23, по идее.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1393 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.