Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Программное создание компонентов и подключение к бд / 7 сообщений из 7, страница 1 из 1
26.12.2017, 10:26
    #39575885
kamero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание компонентов и подключение к бд
Здраствуйте. Решил создать подключение к БД не кидая компоненты на форму. То есть полностью пустая форма. И как бы подключение происходит. Но вот запрос почему то не выполняется...

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
unit Unit1;

interface

uses
  Windows, IniFiles, Messages, Forms, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
  uADStanIntf, uADStanOption, uADStanDef, uADPhysIntf, uADGUIxIntf,
  uADDatSManager, uADStanError, uADStanParam, uADDAptIntf,
  uADGUIxFormsWait, DB, uADCompDataSet, uADCompClient, uADPhysManager,
  uADPhysMySQL, ActiveX, ComObj, Variants, ExtCtrls, ShellApi, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure ParamsToConDB;
    procedure ConToDB;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ADConnection1: TADConnection;
  ADTransaction1: TADTransaction;
  ADGUIxWaitCursor1: TADGUIxWaitCursor;
  ADPhysMySQLDriverLink1: TADPhysMySQLDriverLink;
  MyQuery1: TADQuery;
  DriverID, Database, User_Name, Password, CharacterSet, Server, Port: string;
  
implementation

{$R *.dfm}

procedure TForm1.ParamsToConDB;
var
  ST : TIniFile;
begin
if FileExists(GetCurrentDir + '\' + 'config.ini') then
  begin
    ST := TIniFile.Create(ExtractFilePath(paramstr(0)) + 'config.ini');
    DriverID := ST.ReadString('Base','DriverID','MySQL');
    Database:= ST.ReadString('Base','Database','msservice');
    User_Name:= ST.ReadString('Base','User_Name','root');
    Password:= ST.ReadString('Base','Password','root');
    CharacterSet:= ST.ReadString('Base','CharacterSet','cp1251');
    Server:= ST.ReadString('Base','Server','127.0.0.1');
    Port:= ST.ReadString('Base','Port','3306');
    ST.Free;
  end
    else
  begin
    ST := TIniFile.Create(ExtractFilePath(paramstr(0)) + 'config.ini');
    ST.WriteString('Base','DriverID','MySQL');
    ST.WriteString('Base','Database','msservice');
    ST.WriteString('Base','CharacterSet','cp1251');
    ST.WriteString('Base','Server','127.0.0.1');
    ST.WriteString('Base','Port','3306');
    DriverID := ST.ReadString('Base','DriverID','MySQL');
    Database:= ST.ReadString('Base','Database','msservice');
    User_Name:= ST.ReadString('Base','User_Name','root');
    Password:= ST.ReadString('Base','Password','root');
    CharacterSet:= ST.ReadString('Base','CharacterSet','cp1251');
    Server:= ST.ReadString('Base','Server','127.0.0.1');
    Port:= ST.ReadString('Base','Port','3306');
    ST.Free;
  end;
end;

procedure TForm1.ConToDB;
begin
ADConnection1 := TADConnection.Create(nil);
ADTransaction1 := TADTransaction.Create(nil);
ADGUIxWaitCursor1 := TADGUIxWaitCursor.Create(nil);
ADPhysMySQLDriverLink1 := TADPhysMySQLDriverLink.Create(nil);
MyQuery1 := TADQuery.Create(nil);
MyQuery1.Connection := ADConnection1;
MyQuery1.Transaction := ADTransaction1;

  If not ADConnection1.Connected then
    begin
      try
        ADPhysMySQLDriverLink1.VendorLib := 'libmySQL.dll';
        ADConnection1.LoginPrompt := False;
        ADConnection1.Transaction := ADTransaction1;
        ADConnection1.Params.Clear;
        ADConnection1.DriverName:=DriverID;
        ADConnection1.Params.Add('Database='+Database);
        ADConnection1.Params.Add('User_Name='+User_Name);
        ADConnection1.Params.Add('Password='+Password);
        ADConnection1.Params.Add('CharacterSet='+CharacterSet);
        ADConnection1.Params.Add('Server='+Server);
        ADConnection1.Params.Add('Port='+Port);
        ADConnection1.Connected:=true;
      except
        on E: Exception do
          begin
            ADConnection1.Connected:=false;
         end;
      end;
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 ParamsToConDB;
 ConToDB;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
If MyQuery1.Connection= ADConnection1 then
begin
  MyQuery1.Transaction.StartTransaction;
    try
      MyQuery1.Close;
      MyQuery1.SQL.Text := 'Insert into process (Caption, Date_Time) values (:pCaption, :pDate_Time);';
      MyQuery1.prepare;
      MyQuery1.ParamByName('pCaption').Value := '123';
      MyQuery1.ParamByName('pDate_Time').AsDateTime := Now;
      MyQuery1.ExecSQL;
      MyQuery1.Transaction.Commit;
    except
      MyQuery1.Transaction.Rollback;
    end;
  MyQuery1.Free;
end;  
end;

end.


Включал пошаговую отладку. И в момент когда попадаю в try ловлю ошибку.
...
Рейтинг: 0 / 0
26.12.2017, 10:35
    #39575893
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание компонентов и подключение к бд
Что за инфантилизм ? Сделайте пробное приложение и статически вставьте туда параметры подключения и запрос.
И найдете ошибку.
...
Рейтинг: 0 / 0
26.12.2017, 10:42
    #39575899
kamero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание компонентов и подключение к бд
LSV,

В том то и дело. Что это и есть пробный проект. Как бы к БД я подключаюсь, но запрос не выполняется. Типо Connection пустое, но оно не пустое... Если выставлю компоненты, то всё будет работать.
...
Рейтинг: 0 / 0
26.12.2017, 11:13
    #39575929
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание компонентов и подключение к бд
kamero,

1) Уверены, что есть соединение с базой? В случае, если соединения нет, вы переводите ADConnection1.Connected:=false; Без отображения ошибки.
2) проверять надо ADConnection1.Connected
3) Если нажать второй раз на Button2, то получит AV.
...
Рейтинг: 0 / 0
26.12.2017, 11:22
    #39575937
kamero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание компонентов и подключение к бд
goldmi45,

Да соединение есть. Выставляю "If ADConnection1.Connected then" возвращает True.

В запросе чисто для проверки вставлял "If MyQuery1.Connection= ADConnection1 then" чтобы убедится что оно не пустое.
...
Рейтинг: 0 / 0
26.12.2017, 11:28
    #39575941
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание компонентов и подключение к бд
kamero,

у ADTransaction1 установлен Connection?
...
Рейтинг: 0 / 0
26.12.2017, 11:36
    #39575948
kamero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание компонентов и подключение к бд
goldmi45,

упс)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Программное создание компонентов и подключение к бд / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]