![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Консольное приложение и DataModule с ADO???? [D5, D6, Win2k]
vikser © (2003-01-31 17:02:00)Есть консольное приложение, и есть DataModule с компонентами ADO... Любое обращение к ADO-компонентам вызывает "неустранимую ошибку". При обращении к другим функциям из DataModule, не связанными с ADO все проходит нормально... В чем у меня беда?
sniknik (2003-01-31 18:36:00) [1]ну значит дело в другом, вам надо к доктору :-)).
опиши конкретнее как что происходит. или попробуй, простейший пример, точно работает.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, ADODB, ActiveX;
var
ADOConnection: TADOConnection;
ADOCommand: TADOCommand;
begin
CoInitialize(nil);
ADOConnection:= TADOConnection.Create(nil);
ADOCommand:= TADOCommand.Create(nil);
ADOConnection.ConnectionString:= "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Northwind";
ADOConnection.LoginPrompt:= false;
ADOCommand.Connection:= ADOConnection;
ADOCommand.CommandText:= "CREATE TABLE TestTable (TestField Char(10))";
ADOCommand.Execute;
ADOCommand.Free;
ADOConnection.Free;
coUnInitialize();
end.
vikser (2003-01-31 18:23:00) [2]Не работает...
sniknik (2003-01-31 18:18:00) [3]можно сюда
{$APPTYPE CONSOLE}
uses
SysUtils,
ActiveX,
Classes,
IniFiles,
ado_con in "ado_con.pas" {DM: TDataModule};
type
TToInet = class (TObject)
***
begin
CoInitialize(nil);
***
CoUnInitialize();
end.
можно в какой нибудь модуль, на инициализацию / финализацию, главное до вызовов ADO и после вызовов снять. Для устраниния ошибки ActiveX в uses.
vikser (2003-01-31 18:11:00) [4]И при вызове этой функции возникает ошибка :(
vikser (2003-01-31 18:10:00) [5]Я к сожалению не знаю, куда это нужно вставить...
вот мой DataModule:
unit ado_con;
interface
uses
SysUtils, Classes, DB, ADODB;
type
TDM = class(TDataModule)
my_ado_con: TADOConnection;
my_ado_query: TADOQuery;
private
{ Private declarations }
public
{ Public declarations }
function MySqlResult(dir,pc,f,tn : string) : string;
end;
var
DM: TDM;
implementation
{$R *.dfm}
function TDm.MySqlResult(dir,pc,f,tn : string) : string;
begin
dm.my_ado_con.ConnectionString:="FILE NAME="+dir+"\toinet.udl";
dm.my_ado_query.connection:=dm.my_ado_con;
my_ado_query.SQL.Clear;
my_ado_query.SQL.Text:="SELECT NameAdress FROM internet WHERE ((PostCode="+pc+") AND (Filial="+f+") AND (TN="+tn+"))";
try // Подключение к базе данных
dm.my_ado_con.Open;
try // Открытие запроса
dm.my_ado_query.open;
try // Переход на первую запись
dm.my_ado_query.First;
if dm.my_ado_query.RecordCount=0
then result:="nill"
else result:=dm.my_ado_query.Fields[0].AsString;
except else
begin
end
end;
try
dm.my_ado_query.Close;
except else
begin
end;
end;
except else // Открытие запроса - ИС
begin // Открытие запроса - ИС
end; // Открытие запроса - ИС
end; // Открытие запроса - конец
try // Отключение от базы данных
dm.my_ado_con.Close;
except else // Отключение от базы данных ИС
begin // Отключение от базы данных ИС
end // Отключение от базы данных ИС
end; // Отключение от базы данных
except else // Подключение к базе данных ИС
begin // Подключение к базе данных ИС
end // Подключение к базе данных ИС
end; // Подключение к базе данных
end;
end.
Вот консольное приложение:
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes,
IniFiles,
ado_con in "ado_con.pas" {DM: TDataModule};
type
TToInet = class (TObject)
***
// ----- Процедура выполняет запрос к базе данных ---------------
function TToInet.get_ado_lines(pc,f,tn : string) : string;
begin
writeln(ado_con.DM.MySqlResult(main_path,"10","11","12"));
end;
***
sniknik (2003-01-31 17:59:00) [6]в обшем случае, и чаще всего не сделано
CoInitialize(nil);
....
незабывать завершение
CoUnInitialize();