Tengo una aplicación en delphi7, que conecta con base datos SQL Server, y necesito lanzar un paquete DTS que esta en SQL. ¿Cómo hacerlo? ¿Se puede?
1 respuesta
Respuesta de gaunmanuel
1
1
gaunmanuel, Desarrollador de sistemas, delphi, SQL Interbase, Oracle
function TMainForm.ExecCmdLineAndWait(const CmdLine: string;WindowState: Word;Wait: Boolean): Boolean; var SUInfo: TStartupInfo; ProcInfo: TProcessInformation; begin FillChar(SUInfo, SizeOf(SUInfo), #0); with SUInfo do begin cb := SizeOf(SUInfo); dwFlags := STARTF_USESHOWWINDOW; wShowWindow := WindowState; end; Result := CreateProcess(nil, PChar(CmdLine), nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil {PChar(ExtractFilePath(Filename))}, SUInfo, ProcInfo); { Esperar hasta que termine. } if Wait and Result then WaitForSingleObject(ProcInfo.hProcess, INFINITE); end; y asi seria como ejecutar este metodo: ExecCmdLineAndWait(Ruta + 'DTS\dtsrun' + ' /f '+ Ruta +'DTS\' + NombreDts + '.dts /n ' + NombreDts,SW_HIDE, True);
Hola GaunManuel Podrías aclararme algo el código, el paquete esta guardado en:Servicios de tranformacion/paquetes locales de sql. Muchas Gracias
Hola gaun Aunque me gustaría que me aclararas el código, creo que ya comprendo algo, el modificador /f es para un fichero y no para un paquete que esta guardado directamente en paquetes locales, he utilizado el modificador /s y el /v para indicarle que esta en el servidor y la version que quiero ejecutar. Muchísimas gracias.
Hola gaun Como te comentaba, conseguí que funcionara el código, pero ahora me encuentro con otro problema, los equipos que van a ejecutar el programa no tienen instalado sql server y no me funciona el código. ¿Qué debo cambiar en el código o que debo actualizar en los equipos, sin instalar SQL Server? Gracias
Ah pues el detalle esta en eso, en que yo ejecuto el archivo al especificar /f y por eso puedo ejecutarlo desde cualquier maquina, en cuanto a lo tuyo nunca he podido ejecutarlos así. Es con lo que puedo ayudarte.
Perdona mi insistencia gaun ExecCmdLineAndWait(Ruta1 + 'DTS\dtsrun' + ' /f '+ Ruta2 +'DTS\' + NombreDts1 + '.dts /n ' + NombreDts2,SW_HIDE, True) pero podrias decirme ruta1= ruta2= nombredts1= nombredts2= Que habría que poner en cada uno de los valores anteriores que lleva el EXECMD Gracias
Ah ok. Ruta1 + 'DTS'\dtsrun : esto se refiere a donde se encuentra un executable el cual es proporcionado por SQL Server, buscalo en tu maquina dtsrun.exe Luego : /f: indica que es ejecución de archivo. Luego Ruta2+'DTS\'+NombreDts1.dts, es la ruta y nombre donde se encuentra tu DTS Luego /n: es no se exactamente para que pero es un atributo que necesita. Luego va de nuevo el nombre del DTS sin extensión. Ejemplo ExecCmdLineAndWait('c:\Program Files\DTS\dtsrun.exe /f c:\miDTS\ArchivoDTS.dts /n ArchivoDTS, SW_HIDE, True);