Форум: "Начинающим";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
ВнизПривет мастерам! Как вызвать процедуру в DataModule из Unit`a. Найти похожие ветки
← →
vegarulez © (2006-04-25 18:40) [0]Привет мастерам.
У меня есть форма и дата модуль, где есть элемент свзи с бд.
Вопрос:
как из unit1 вызвать процедуру создания датамодуля
(procedure TDataModule2.DataModuleCreate(Sender: TObject);)
в unit2?
просто вообще не знаю, как вызывать процедуры из разных unit-ов. если есть ссыль где описан вызов процедуры (желательно с примером) - киньте плз. прочту.
← →
Джо © (2006-04-25 18:56) [1]uses ..., DataModuleUnit, ...;
← →
vegarulez © (2006-04-25 19:38) [2]2 Джо: Что-то не совсем понятно...
Я ещё пока лам в Дэльфях, вот пока что у меня получилось, неподскажешь как добавить (там закоментено, где я хочу вызов вставить):
===========
unit Unit1;
interface
uses
SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
QStdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.xfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage("Ok");
if (DataModule2.SQLTest1.Connected=True) then
begin
datamodule2.SQLnum.SQL.Clear;
datamodule2.SQLnum.SQL.Add("INSERT INTO `test1` (`num` , `sum` , `sec` ) VALUES ("+ edit1.text + ", "+ Edit2.Text +", "+ edit4.text +")");
datamodule2.SQLnum.ExecSQL();
end
else
begin
// вот здесь нужно как-то вызвать процедуру из unit2
//procedure TDataModule2.DataModuleCreate(Sender: TObject);
// чтобы он попытался ещё раз подконнектится, если не получилось,
//то допустим писать данные в текстовый файлик писать (но
//с текстовым я уже сам сделаю :) )
end;
end;
end.
===============
unit Unit2;
interface
uses
SysUtils, Classes, DBXpress, FMTBcd, DB, SqlExpr;
type
TDataModule2 = class(TDataModule)
SQLTest1: TSQLConnection;
SQLnum: TSQLQuery;
procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
DataModule2: TDataModule2;
implementation
{$R *.xfm}
procedure TDataModule2.DataModuleCreate(Sender: TObject);
begin
try
Datamodule2.SQLTest1.Connected:=true;
except
on E:Exception do
abort;
end;
end;
end.
← →
Джо © (2006-04-25 19:42) [3]Не нужно создавать датамодули пачками, если всего лишь захотелось "еще раз подконнектиться".
← →
vegarulez © (2006-04-25 20:35) [4]В смысле? Как понять пачками?
Может где-нибудь написано как это сделать???
← →
Джо © (2006-04-25 20:49) [5]1. Заводишь паблик-метод в классе TDataModule2, который будет выполнять коннект. Допустим, называешь его Connect.
2. Вызываешь его: DataModule2.Connect.
3. В блоке except ловишь возможное исключение и протоколируешь его.
Т.е, как-то так:
type
TDataModule2 = class(TDataModule)
...
public
procedure Connect;
end;
procedure TDataModule2.Connect;
begin
Datamodule2.SQLTest1.Connected:=true;
end;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
if (DataModule2.SQLTest1.Connected=True) then
begin
datamodule2.SQLnum.SQL.Clear;
datamodule2.SQLnum.SQL.Add("INSERT INTO `test1` (`num` , `sum` , `sec` ) VALUES ("+ edit1.text + ", "+ Edit2.Text +", "+ edit4.text +")");
datamodule2.SQLnum.ExecSQL();
end
else
begin
try
DataModule2.Connect
except
on E: Exception do
begin
// протоколируешь ошибку
// при необходимости пускаешь исключение дальше
raise
end;
end;
end;
Логику кода в ButtonClick не исправлял, какая-то она непонятная :)
← →
vegarulez © (2006-04-25 21:22) [6]Ахха спасип...
ща попробую...
логика там проста: если типа нет коннекта - писать в файл, потом когда он (коннект) появится, из файла будет выдёргиваться, всё то что не отправилось - и отправляться в бд...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c