Foros del Web » Programando para Internet » PHP »

Pasar datos de una tabla en SQLServer a otra tabla en PostgreSQL

Estas en el tema de Pasar datos de una tabla en SQLServer a otra tabla en PostgreSQL en el foro de PHP en Foros del Web. Hola a todos: Ya revisé todo el foro buscando en otros temas y al parecer nadie ha presentado un problema similar al mío. Hace un ...
  #1 (permalink)  
Antiguo 19/10/2009, 08:42
Avatar de marie_mar  
Fecha de Ingreso: septiembre-2009
Mensajes: 26
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta Pasar datos de una tabla en SQLServer a otra tabla en PostgreSQL

Hola a todos:
Ya revisé todo el foro buscando en otros temas y al parecer nadie ha presentado un problema similar al mío.
Hace un tiempo desarrollé una aplicación en Visual Basic que se conectaba por ADO a una base de datos remota en SQLServer, obtenía los datos que necesitaba de una tabla y llenaba otra tabla con los mismos campos en una bd de PostgreSQL.

El código (lo he recortado) básicamente es así:

'Creo los objetos
Set RSmfp = New ADODB.Recordset
Set RSrrhh = New ADODB.Recordset
Set RSup = New ADODB.Recordset

'Cargo la consulta de la tabla que tiene los datos en SQLServer (CPT_Empleados)
SQLp = ""
SQLp = "SELECT loscampos"
SQLp = SQLp + " FROM CPT_Empleados"

'Cargo el recordset con los datos de la consulta
With RSrrhh
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.ActiveConnection = ConRRHH
.Open SQLp, ConRRHH
End With

'Cargo la consulta de la tabla que voy a actualizar en PostgreSQL (trab)
SQLm = ""
SQLm = "SELECT loscampos"
SQLm = SQLm + " FROM trab"

'Cargo el recordset con los datos de la consulta
With RSmfp
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.ActiveConnection = ConEST
.Open SQLm, ConEST
End With

On Error GoTo MiError

RSrrhh.MoveFirst

While Not (RSrrhh.EOF)

criterio = ""
criterio = "ntar = '" & Trim((RSrrhh.Fields("Id_Empleado").Value)) & "'"

RSmfp.Find criterio, , , 1

If (RSmfp.EOF) Then
'No esta, hay que agregarlo nuevo
SQL = ""
SQL = "INSERT INTO trab (loscampos) VALUES ('" & _
Trim(RSrrhh.Fields("loscampos").Value) & "')"

RSup.LockType = adLockOptimistic
RSup.Open SQL, ConEST, adOpenStatic
End If

RSrrhh.MoveNext

Wend

O sea, cargo una consulta con los datos que necesito de la tabla de sqlserver, y con un ciclo While.....Wend, voy llenando los datos en la tabla postgresql.

El caso es que no tengo la más remota idea de como hacerlo en php.

Ya tengo los dos código de conexión que necesito y funcionan:
postgresql:
$conpg = pg_connect("host=192.168.152.57 port=5432 dbname='$_SESSION[bdest]' user='$_SESSION[usuario]' password='$_SESSION[password]'");
return $conne;

sqlserver:
$consql = mssql_connect("MDAEMON1","usrfastos","fastosusr");
mssql_select_db("RRHH_MFPv5",$consql);

Consulta a la tabla en sqlserver:
//Cargo los datos de la base de datos de personal en sqlserver
$sqlp = "";
$sqlp = mssql_query("SELECT CI, Nombre, Id_Empleado, FechaAlta, PrimerApellido, SegundoApellido, Chequera FROM CPT_Empleados");
$rowsqlp = mssql_fetch_array($sqlp ) or die(mssql_error());

Consulta que ejecuto para llenar los datos en postgresql:
$sqle = "";
$sqle = "INSERT INTO trab (nci, nomb, ntar, fec, apel, c_est) VALUES (" . ($rowsqlp[0]). ", " . ($rowsqlp[1]). "," . ($rowsqlp[2]). "," . ($rowsqlp[3], "mm/dd/yyyy"). "," . ($rowsqlp[4]). "," . ($rowsqlp[5]). "," . ($rowsqlp[6]). ")";
pg_query($conpg, $sqle) or die(pg_last_error());

Ahora, me he trabado completamente a la hora de recorrer los registros de la tabla en sqlserver e insertarlos en la tabla postgresql....

Alguien me puede ayudar?????

Saludos y gracias
  #2 (permalink)  
Antiguo 19/10/2009, 09:34
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Pasar datos de una tabla en SQLServer a otra tabla en PostgreSQL

Hola...

Lo que veo es que no tienes un while de tu consulta SQL Server...

Código php:
Ver original
  1. while($rowsqlp = mssql_fetch_array($sqlp)){
  2. $sqle = "INSERT INTO trab (nci, nomb, ntar, fec, apel, c_est) VALUES (" . ($rowsqlp[0]). ", " . ($rowsqlp[1]). "," . ($rowsqlp[2]). "," . ($rowsqlp[3], "mm/dd/yyyy"). "," . ($rowsqlp[4]). "," . ($rowsqlp[5]). "," . ($rowsqlp[6]). ")";
  3. pg_query($conpg, $sqle) or die(pg_last_error());
  4. }

Creo...


Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #3 (permalink)  
Antiguo 19/10/2009, 12:07
Avatar de marie_mar  
Fecha de Ingreso: septiembre-2009
Mensajes: 26
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Pasar datos de una tabla en SQLServer a otra tabla en PostgreSQL

Gracias!, ya me funcionó. En realidad el código en php es más fácil.

El único campo que no pasa es el de la fecha.

PostgreSQL muestra en un campo date, por ejemplo: 01/05/2009 (1 de mayo del 2009) pero cuando vas a guardar el parámetro debes formatear el campo fecha, porque él entiende 05/01/2009 (mayo 1 del 2009) aunque después muestre el dato correctamente.

No sé como formatear el campo fecha del sqlserver en la consulta para que postgresql lo entienda. O sea, debo formatear el campo para postgresql de forma que quede "mm/dd/yyyy".
  #4 (permalink)  
Antiguo 19/10/2009, 19:52
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Pasar datos de una tabla en SQLServer a otra tabla en PostgreSQL

Ahh pues breve :p...

Digamos que Sql Server te envia la fecha así:

Código php:
Ver original
  1. $fecha = '01/05/2009';

La quieres convertir en PostgreSQL:

Código php:
Ver original
  1. $list($dia, $mes, $ano) = explode('/', $fecha);
  2. $fechaPostgres = "$mes/$dia/$ano";
  3. echo $fechaPostgres;

Espero lo entiendas, sino, dale que te explico ;)

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:36.