У меня есть веб-сервис, который я создал с помощью Delphi, и я хочу подключиться к серверу sql с ним, поэтому я добавил в проект ADO Connection и ADOQuery, оба из которых были настроены и готовы к использованию, была только небольшая проблема, в моем проекте есть две единицы, и эти объекты были добавлены в Unit1, и я работаю с моим ImplUnit whitch - это еще одна единица и не может найти способ ссылаться или включать одну единицу внутри другого устройства ,Delphi 7 object undefinedat
блок1
{ SOAP WebModule}
unit Unit1;
interface
uses
SysUtils, Classes, HTTPApp, InvokeRegistry, WSDLIntf, TypInfo,
WebServExp, WSDLBind, XMLSchema, WSDLPub, SOAPPasInv, SOAPHTTPPasInv,
SOAPHTTPDisp, WebBrokerSOAP, DB, ADODB;
type
TWebModule1 = class(TWebModule)
HTTPSoapDispatcher1: THTTPSoapDispatcher;
HTTPSoapPascalInvoker1: THTTPSoapPascalInvoker;
WSDLHTMLPublish1: TWSDLHTMLPublish;
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
ADOQuery1: TADOQuery;
procedure WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
WebModule1: TWebModule1;
implementation
{$R *.dfm}
procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
WSDLHTMLPublish1.ServiceInfo(Sender, Request, Response, Handled);
end;
end.
Мой блок
unit UTImplementacao;
interface
uses
InvokeRegistry,DB, ADODB;
type
IInterface = interface(IInvokable)
['{EFF30FFA-DA0C-433A-832A-0BA057B55103}']
function ReceiveUser(username : String; password : String) :
Boolean; stdcall;
end;
TImplementacao = class(TInvokableClass, IInterface)
public
function ReceiveUser(username : String; password : String) :
Boolean; stdcall;
end;
implementation
{ TImplementacao }
function TImplementacao.ReceiveUser(username, password: String): Boolean;
var
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
begin
try
ADOConnection1 := TADOConnection.Create(nil);
ADOConnection1.LoginPrompt := False;
ADOConnection1.ConnectionString:= 'Provider=SQLOLEDB.1;Integrated Security=SSPI;' +
'Persist Security Info=False;' +
'User ID=Diego;'+
'Catalog=OnlineShopping;' +
'Data Source=DIEGO-PC\SQLEXPRESS'+
';Use Procedure for Prepare=1;' +
'Auto Translate=True;Packet Size=4096;'+
'Workstation ID=DIEGO-PC;'+
'Use Encryption for Data=False;'+
'Tag with column collation when possible=False;';
ADOConnection1.Connected := True;
ADOQuery1.Connection := ADOConnection1;
ADOQuery1.SQL.Add('select username,upassword from Users '+
'where username = :usernamep and upassword = '+
':upasswordp');
ADOQuery1.Parameters.ParamByName('upasswordp').Value := password;
ADOQuery1.Parameters.ParamByName('usernamep').Value := username;
ADOQuery1.ExecSQL;
Result := True;
finally
ADOQuery1.Free;
if ADOConnection1.Connected then
ADOConnection1.Close;
ADOConnection1.Free;
end;
Result := False;
end;
initialization
InvRegistry.RegisterInvokableClass(TImplementacao);
InvRegistry.RegisterInterface(TypeInfo(IInterface));
end.
пожалуйста игнорировать ADOConnection и ADOQuery, что я добавил к моему блоку я получил немного отчаянное объявление duplicade кода ... Да, я знаю, yachs !!!!
@SilverWarrior
Если объявить Unit1 внутри использования UTImplementacao я буду иметь доступ к componemts ниже:
type
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
ADOQuery1: TADOQuery;
или я должен объявить для каждого из типов переменных внутри п вар?
Либо вы не опубликовали фактический код, который используете, или вам нужно уделять больше внимания вашему экрану. В первом из этих файлов есть комментарий с прекращенным завершением. SO делает это легко увидеть в вопросе, также в предварительном просмотре. В Delphi IDE также легко видеть то же самое. Во всяком случае, даже в стороне от этого, для меня практически невозможно понять, что вы пытаетесь спросить.Сделайте шаг назад, посмотрите на свой вопрос и посмотрите, сможете ли вы это понять, если бы кто-то спросил об этом. Если нет, вы можете решить вопрос, чтобы сделать его более понятным. – hvd
Спасибо за быстрый ответ, но чтобы сделать его простым, я хочу создать веб-службу, которая будет подключаться к базе данных SQL Server с помощью Delphi. – user2414726
Это не ваш настоящий код, потому что оба устройства называются 'unit1', и вы не можете иметь две единицы с тем же именем в одном проекте. Когда вы обходитесь, чтобы предоставить реальный код, с которым вы столкнулись, и можете * четко объяснить * проблему, с которой вы сталкиваетесь, [изменить] свой вопрос и сделать это. До тех пор я голосую, чтобы закрыть его как вне темы, потому что вы четко не заявили о проблеме или не включили соответствующий код. –