Ver Mensaje Individual
  #4  
Antiguo 10-10-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Reputación: 13
aromigaret Va por buen camino
Despues de mucho investigar encontre la solucion. La dejo por si alguien lo necesita. Es para Sql server 2008 en adelante

Primero hay que ejecutar en sql

sp_configure 'show advanced options', 1
reconfigure
go
exec sp_configure 'Ad Hoc Distributed Queries',1
go
reconfigure
go

Esto es para habilitar la opcion Ad Hoc la cual permite la comunicacion con entornos externos de sql

Luego escribir para crear el procedimiento almacenado

Código SQL [-]
CREATE PROCEDURE [dbo].[VOLCAR]
  @ARCHIVO NCHAR(30),          -- NOMBRE DEL .DBF A ACCEDER
  @PATH NCHAR(20),               -- DIRECTORIO DONDE SE ENCUENTRA  POR EJEMPLO 'C:\PEDIDOS\'
  @PEDIDO NCHAR(50)             -- TABLA DONDE DESCARGAR EL CONTENIDO DE  @ARCHIVO
    
AS
BEGIN 
  DECLARE @sql char(400) 
  DECLARE @Driver sysname 
  DECLARE @Cadena sysname 
  DECLARE @Sentencia CHAR(100)
  
  SET NOCOUNT ON;  
  
  EXECUTE ('CREATE TABLE '+ @PEDIDO + '(CANTIDAD NUMERIC(8,2),ARTICULO NCHAR(60), MARCA NCHAR(15), CODIGONUM NCHAR(5))')  
  
  SET @Driver= '''' + 'Microsoft.Jet.OLEDB.4.0' + '''' 
  SET @Cadena= '''' + 'dBase IV; HDR=NO;IMEX=2; DATABASE=' + @PATH + ''''   
  SET @Sentencia= '''' + 'SELECT CANTIDAD,ARTICULO,MARCA,CODIGONUM FROM ' + @ARCHIVO + ''''    
  SET @sql='INSERT INTO ' + @PEDIDO + ' select * FROM OPENROWSET(' + @Driver + ', ' + @Cadena + ', ' + @Sentencia + ')' 
  
  execute (@sql)

y el llamado del procedimeinto desde Delphi es :

Código Delphi [-]
        PROCEDIMIENTO.ProcedureName:='VOLCAR';
        PROCEDIMIENTO.Parameters.Refresh;
        PROCEDIMIENTO.Parameters.ParamByName('@PATH').Value:= 'c:\pedidos\';          // DIRECTORIO DONDE SE ENCUENTRA LA TABLA .DBF
        PROCEDIMIENTO.Parameters.ParamByName('@ARCHIVO').Value:= ARCHIVO_DBF;   // CON LA EXTENSION .DBF INCLUIDA EN EL NOMBRE EJEMPLO 'BASE.DBF'
        PROCEDIMIENTO.Parameters.ParamByName('@PEDIDO').Value:= MIBASENUEVA ;   // LA TABLA DONDE SE GUARDARA LOS DATOS DE LA 'BASE.DBF'
        PROCEDIMIENTO.ExecProc;

Espero que le sea util a alguien.
Saludos
Responder Con Cita