none
select a 3 tablas libres dbf de visual foxpro RRS feed

  • Pregunta

  • hola buenas solicito de su ayuda estoy trabajando con 3 tablas dbf de visual foxpro las cuales estan en diferentes carpetas de un directorio ejemplo en c:\contrato\plamae.dbf,  c:\contrato\seccion\plades.dbf , c:\contrato\contratos.dbf

    ya puedo acceder un mantenimiento de las tablas por separado, la cadena de coneccion la logro mediante el conector VFPOLEDBSetup.msi, en una clase tengo lo siguiente  

    Public Shared cn_plamae As New System.Data.OleDb.OleDbConnection("Provider=vfpoledb.1;Data Source=c:\contrato\plamae.dbf")

      y en el frm tengo el siguiente codigo 

    Private Sub llenar_dtempleado(ByVal cod As String)
            Try
                Dim Dt As New DataTable
                Dim Dadapter As OleDbDataAdapter
                cn_plamae.Close()
                cn_plamae.Open()
                Dim Comando As New System.Data.OleDb.OleDbCommand("select NUMEMP,TIPOPLA,TIPOEMP,DEPEMPM,CARGOM,GRUPEMP,FORMPAG,SALAMESM,SALAHORM,FECHING,ESTATUS," &
                                                                  "PNOMBRE,SNOMBRE,PAPEL,SAPEL,APCASADA,CONCIDOPOR,CEDULA,NITEMP,ISSSEMP," &
                                                                  "AFP,NUP,INPEP,SEXO,EDOCIVIL,FECHNAC,TELPARTI,EMAIL,NACIONALID,DPT,MUNI,DIRECC from plamae where numemp='" & cod & "' ", cn_plamae)
                Comando.CommandType = CommandType.Text
                Dadapter = New OleDbDataAdapter(Comando)
                Dadapter.Fill(Dt)
                If Dt.Rows.Count > 0 Then
                    Dim row As DataRow = Dt.Rows(0)
                    'RTrim(row("").ToString)
                    'RTrim(LTrim(row("").ToString))
                    txt_codigo.Text = RTrim(row("NUMEMP").ToString)
                    ' MsgBox(row("TIPOPLA"))
                    'RTrim(row("").ToString)
                    txt_pnombre.Text = RTrim(LTrim(row("PNOMBRE").ToString))
                    txt_snombre.Text = RTrim(LTrim(row("SNOMBRE").ToString))
                    txt_papellido.Text = RTrim(LTrim(row("PAPEL").ToString))
                    txt_sapellido.Text = RTrim(LTrim(row("SAPEL").ToString))
                    txt_apecasado.Text = RTrim(LTrim(row("APCASADA").ToString))
                    txt_conocido.Text = RTrim(LTrim(row("CONCIDOPOR").ToString))
                    txt_dui.Text = RTrim(row("CEDULA").ToString)
                    txt_nit.Text = RTrim(row("NITEMP").ToString)
                    txt_iss.Text = RTrim(row("ISSSEMP").ToString)
                    cb_afp.Value = RTrim(row("AFP").ToString)
                    txt_nup.Text = RTrim(row("NUP").ToString)
                    txt_inpep.Text = RTrim(row("INPEP").ToString)
                    cb_genero.Value = RTrim(row("SEXO").ToString)
                    cb_estadocv.Value = RTrim(row("EDOCIVIL").ToString)
                    txt_fechnaci.Date = CDate(row("FECHNAC"))
                    txt_telefono.Text = RTrim(row("TELPARTI").ToString)
                    txt_email.Text = RTrim(row("EMAIL").ToString)
                    cb_nacionalida.Value = RTrim(row("NACIONALID").ToString)
                    cb_departamento.Value = RTrim(row("DPT").ToString)
                    cb_departamento_TextChanged(Nothing, Nothing)
                    cb_municipio.Value = RTrim(row("MUNI").ToString)
                    txt_direccion.Text = RTrim(row("DIRECC").ToString)
                Else
                    LIMPIAR()
                End If
                cn_plamae.Close()
            Catch sqlEx As OleDb.OleDbException
                uc_mensaje.lbmsj.Visible = True
                uc_mensaje.lberror.Text = (sqlEx.Message)
            Catch ex As Exception
                uc_mensaje.lbmsj.Visible = True
                uc_mensaje.lberror.Text = (ex.Message)
            Finally
                cn_plamae.Close()
            End Try
        End Sub

    el cual funciona bien, lo que pretendo es hacer una consulta sacando información de las tres tablas libres 

    select pla.emplead, plad.cargo, cont.ncontrato from plamae pla, plades plad, contratos cont where pla.codemp=plad.codemp and pla.codemp=cont.codemp




    fredy_najarro

    lunes, 28 de diciembre de 2015 2:46

Respuestas

Todas las respuestas

  • hola

    Si para cada tabla necesitas un connection string diferente no vas a poder realizar un join entre estas en un unico query

    aunque por lo comentado aqui

    How to create a join across two foxpro databases using the MS Ole DB provider?

    si los dbf estan baho una misma estructura de carpetas podrias usar esta en la query para unir las diferentes tablas en uan unica query

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta fredy_saga lunes, 28 de diciembre de 2015 18:43
    lunes, 28 de diciembre de 2015 6:22
  • gracias  por tu ayuda, así me quedo la consulta para trabajar con las 2 tablas 

    en la clase 

     Public Shared cn_tb As New System.Data.OleDb.OleDbConnection("Provider=vfpoledb.1;Data Source=\\server1\\datos\\rrhh\\Planilla\\")
       

    en el formulario 

     Private Sub llenar_dt_planillaafp()
            Try
                Dim Dt As New DataTable
                Dim Dadapter As OleDbDataAdapter
                cn_tb.Close()
                cn_tb.Open()
                Dim Comando As New System.Data.OleDb.OleDbCommand("SELECT pli1.anopla+cast(pli1.inipla as varchar(2)) as PlanillaPeriodoDevengue, '' as PlanillaCodigosObservacion, plamae.salamesm as PlanillaIngresoBaseCotizacion," & _
                "pli1.hrsjor as PlanillaHorasJornadaLaboral, pli1.totdiastra as PlanillaDiasCotizados,'' as PlanillaCotizacionVoluntariaAfiliado,'' as PlanillaCotizacionVoluntariaEmpleador, " & _
                "plamae.nup as Nup, pli1.cafp as InstitucionPrevisional,rtrim(pli1.pnombre) as PrimerNombre,rtrim(pli1.snombre) as SegundoNombre,rtrim(pli1.papel) as PrimerApellido ,rtrim(pli1.sapel) as SegundoApellido, " & _
                "rtrim(plamae.apcasada) as ApellidoCasada,rtrim(plamae.concidopor) as ConocidoPor,pli1.tdoc as TipoDocumento,plamae.cedula as NumeroDocumento,plamae.nitemp as Nit,plamae.isssemp as NumeroIsss, " & _
                "plamae.inpep as NumeroInpep,plamae.sexo as Genero,plamae.Nacionalid as Nacionalidad,(pli1.totaldev+pli1.otroing) as SalarioNominal,'' as PuestoTrabajo,plamae.fechnac as FechaNacimiento, " & _
                "iif(edocivil='CASADO(A)', 'C', iif(edocivil='DIVORSIADO(A)', 'D', iif(edocivil='UNION LIBRE', 'U', iif(edocivil='SOLTERO(A)', 'S',iif(edocivil='CASADO(A) ', 'C',space(12)))))) as EstadoCivil," & _
                "rtrim(plamae.direcc) as Direccion,plamae.dpt as Departamento,plamae.muni as Municipio,plamae.telparti as NumeroTelefonico,rtrim(plamae.email) as CorreoElectronico,'P' as TipoEmpleado, " & _
                "pli1.fing as FechaIngreso,'' as FechaRetiro, '' as FechaFallecimiento,pli1.numemp, pli1.code_afp FROM plamae , sistema\pli1 where plamae.numemp=pli1.numemp", cn_tb)
                Comando.CommandType = CommandType.Text
                Dadapter = New OleDbDataAdapter(Comando)
                Dadapter.Fill(Dt)
                dgv_empleado.DataSource = Dt
                dgv_empleado.DataBind()
                cn_tb.Close()
            Catch sqlEx As OleDb.OleDbException
                uc_mensaje.lbmsj.Visible = True
                uc_mensaje.lberror.Text = (sqlEx.Message)
            Catch ex As Exception
                uc_mensaje.lbmsj.Visible = True
                uc_mensaje.lberror.Text = (ex.Message)
            Finally
                cn_plamae.Close()
            End Try
        End Sub


    fredy_najarro

    lunes, 28 de diciembre de 2015 18:48