Bueno para la base de datos, yo siempre use XAMPP y probe para este caso correr el servicio SQL, no se si se podra con mysql workbench, porque nunca use firebird.
Que datos debo poner en la conexion sql, EN MODIFY CONECCTION, dentro de mysql, hice click en new connection, puse localhost, y el nombre de la base de datos que tengo con xampp, que la hice en phpmyadmin, ejecutando el script, y los parametros de xampp, que son "root" y "".
En lo anterior puede haber un problema.
Otra cosa que pense es que se podria poner aqui como quedan las unidades completas, porque vos nos pasaste codigo que vayamos agregando y alo mejor lo coloque mal:
WSdbACCESSintf.pas:
{ Invokable interface IWSdbAccess }
unit WSdbAccessIntf;
interface
uses Soap.InvokeRegistry, System.Types, Soap.XSBuiltIns;
type
{ Invokable interfaces must derive from IInvokable }
IWSdbAccess = interface(IInvokable)
['{F0DB3CA4-86B5-4C04-86B9-DE5967826E6F}']
{ Methods of Invokable interface must not use the default }
{ calling convention; stdcall is recommended }
end;
type
trRetorno = class(TRemotable)
private
FID: integer;
FDescripcion: widestring;
published
property ID: integer read FID write FID;
property Descripcion: widestring read FDescripcion write FDescripcion;
end;
trParams = class(TRemotable)
private
FTitulo: widestring;
FNombre: widestring;
FApellidos: widestring;
FFecha: widestring;
FDireccion: widestring;
FCiudad: wideString;
FPais: wideString;
FCodPostal: wideString;
FTelCasa: wideString;
FTelOficina: wideString;
FCelular: wideString;
FCorreo: wideString;
published
property Titulo: widestring read FTitulo write FTitulo;
property Nombre: widestring read FNombre write FNombre;
property Apellidos: widestring read FApellidos write FApellidos;
property Fecha: widestring read FFecha write FFecha;
property Direccion: widestring read FDireccion write FDireccion;
property Ciudad: widestring read FCiudad write FCiudad;
property Pais: widestring read FPais write FPais;
property CodPostal: widestring read FCodPostal write FCodPostal;
property TelCasa: widestring read FTelCasa write FTelCasa;
property TelOficina: widestring read FTelOficina write FTelOficina;
property Celular: widestring read FCelular write FCelular;
property Correo: widestring read FCorreo write FCorreo;
end;
{ Invokable interfaces must derive from IInvokable }
function GetClientNames: widestring; stdcall;
function GetClientsData(EmpID: integer): widestring; stdcall;
function AddClient(ParamsStr:trParams): trRetorno; stdcall;
function DeleteClient(EmpID: integer): trRetorno; stdcall;
function UpdateClient(EmpID:integer; ParamsStr:trParams): trRetorno; stdcall;
implementation
uses WSdbAccessImpl;
initialization
{ Invokable interfaces must be registered }
InvRegistry.RegisterInterface(TypeInfo(IWSdbAccess));
function TWSdbAccess.GetClientNames: widestring;
begin
dm := TfrmDataModule.Create (nil);
try
dm.dsClientList.Open;
if dm.dsClientList.RecordCount > 0 then begin
Result := FieldsToXml ('ClientList', dm.dsClientList);
end
else begin
Result := '<ClientList>' + sLineBreak +
'</ClientList>' + sLineBreak;
end;
finally
dm.dsClientList.Close;
dm.CLIENTES.Close;
dm.Free;
end;
end;
end.
WSdbACCESSimpl.pas:
{ Invokable implementation File for TWSdbAccess which implements IWSdbAccess }
unit WSdbAccessImpl;
interface
uses Soap.InvokeRegistry, System.Types, Soap.XSBuiltIns, WSdbAccessIntf;
type
{ TWSdbAccess }
TWSdbAccess = class(TInvokableClass, IWSdbAccess)
end;
implementation
function MakeXmlStr (node, value: string): string;
begin
Result := '<' + node + '>' + value + '</' + node + '>';
end;
function FieldsToXml (rootName: string; data: TSQLDataSet1): string;
var
i: Integer;
begin
Result := '<' + rootName + '>' + sLineBreak;;
for i := 0 to data.FieldCount - 1 do
Result := Result + ' ' + MakeXmlStr (
LowerCase (data.Fields[i].FieldName),
data.Fields[i].AsString) + sLineBreak;
Result := Result + '</' + rootName + '>' + sLineBreak;;
end;
interface
uses InvokeRegistry, Types, XSBuiltIns, WSdbAccessIntf,uDataModule, sysUtils, sqlExpr;
type
{ TWSdbAccess }
TWSdbAccess = class(TInvokableClass, IWSdbAccess)
public
function GetClientNames: widestring; stdcall;
function GetClientsData(EmpID: integer): widestring; stdcall;
function AddClient(ParamsStr:trParams): trRetorno; stdcall;
function DeleteClient(EmpID: integer): trRetorno; stdcall;
function UpdateClient(EmpID:integer; ParamsStr:trParams): trRetorno; stdcall;
end;
initialization
{ Invokable classes must be registered }
InvRegistry.RegisterInvokableClass(TWSdbAccess);
end.
implementation
initialization
{ Invokable classes must be registered }
InvRegistry.RegisterInvokableClass(TWSdbAccess);
end.
Otra cosa esta dentro de la carpeta projects de delphi en una subcarpeta prueba.
No se como deberia llamar a mi archivo .dll desde el navegador. Podrias explicar eso tambien
Gracias