|
|
|
Paradoxal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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. 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 Я поставил неверные драйвера? Либо дело еще в чем? Ругается на синтаксис в строке подключения при попытке выставить в ADOQuery в object inspector атрибут Active: True |
|||
|
||||
Antimol |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 118 Регистрация: 28.7.2007 Где: Украина, Киев Репутация: 4 Всего: 4 |
Возможно ошибка в:
(мой пароль);DATABASE=studn; Можно еще создать файл с расширением *.udl - потом кликнуть на него 2 раза - откроется окно настройки подключения. Настраиваете и сохраняете, там же можно проверить подключение. Если все хорошо - потом то же файл можно открыть на редактирование в блокноте и скопировать строку подключения. Это сообщение отредактировал(а) Antimol - 16.6.2015, 09:33 --------------------
Лучшее спасибо это "+" к репутации. Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи.... |
|||
|
||||
Paradoxal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
Antimol |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 118 Регистрация: 28.7.2007 Где: Украина, Киев Репутация: 4 Всего: 4 |
Вы просто написали:
PWD=(мой пароль)ATABASE Кстати попробуйте активировать AdoConnection а не AdoQuery. Если все будет ОК - значит в ADOQuery некорректный запрос. Это сообщение отредактировал(а) Antimol - 16.6.2015, 21:43 --------------------
Лучшее спасибо это "+" к репутации. Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи.... |
|||
|
||||
Paradoxal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 15.6.2015 Репутация: нет Всего: нет |
Antimol, все так. В ADOConnection все нормально, в ADOQuery ругается. Но я, хоть убейте, не могу понять, где и в каком запросе ошибка.
Присоединённый файл ( Кол-во скачиваний: 5 ) Ошибка.jpg 444,79 Kb |
|||
|
||||
Antimol |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 118 Регистрация: 28.7.2007 Где: Украина, Киев Репутация: 4 Всего: 4 |
Я могу только сказать что нужно отлаживать.
Ошибка может быть из за неправильного количества знаков ''' в передаваемых параметрах:
Если хотите чтобы не было проблем с параметрами - начните ими правильно пользоваться: Например:
Думаю принцип понятен. Это сообщение отредактировал(а) Antimol - 17.6.2015, 21:41 --------------------
Лучшее спасибо это "+" к репутации. Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи.... |
||||
|
|||||
Paradoxal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 15.6.2015 Репутация: нет Всего: нет |
Принцип понятен. Но все равно не помогает. Та же ошибка, что и раньше. В построении connection string для MySQL server 5.5.23, по идее.
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |