Page 1 of 1

ADO: ACTUALIZAR CAMPO DE SELECT DE 02 TABLAS MSSQL

Posted: Sun Apr 19, 2020 5:59 am
by Angel Miguel
Amigos:

Tengo el siguiente problema, requiero actualizar un campo de recordset, el cual se construyo en base a un query, luego de actualizar me arroja error

cSql:="SELECT D.*,DP.NOMBRE AS DPTO, PR.NOMBRE AS PROV,DI.NOMBRE AS DIST "+;
"FROM DIRECCION D "+;
" LEFT JOIN DEPARTAMENTO DP ON D.CODDEP=DP.CODDEP "+;
" LEFT JOIN PROVINCIA PR ON D.CODPRO=PR.CODPRO AND D.CODDEP=PR.CODDEP "+;
" LEFT JOIN DISTRITO DI ON D.CODDIS=DI.CODDIS AND D.CODPRO=DI.CODPRO AND D.CODDEP=DI.CODDEP "+;
"WHERE CODSOC = '"+ oRs:Fields("CODSOC"):Value +"' "+;
"ORDER BY ACTIVO"

oRsDir := TOleAuto():New( "ADODB.RecordSet" )

WITH OBJECT oRsDir
:ActiveConnection := oApp:oCon
:Source := cSql
:CursorLocation := adUseClient
:LockType := adLockOptimistic
:CursorType := adOpenDynamic
TRY
:Open()
CATCH
FW_ShowAdoError( oApp:oCon )
END
END
oRsDir:Properties("Unique Table"):Value := "DIRECCION"

&& AQUI ACTUALIZO
-------------------------
oRsDir:Fields("ACTIVO"):Value:='0' && el campo activo es de la tabla direccion
oRsDir:Update()

Re: ADO: ACTUALIZAR CAMPO DE SELECT DE 02 TABLAS MSSQL

Posted: Sun Apr 19, 2020 9:55 am
by MOISES
Hola:

No has indicado el error.

Asimismo, esta línea debería usar la función FW_ValToSQL():

"WHERE CODSOC = '"+ oRs:Fields("CODSOC"):Value +"' "+;

que debería ser:

Code: Select all

"WHERE CODSOC = " + FW_ValToSQL(oRs:Fields("CODSOC"):Value) +;

Re: ADO: ACTUALIZAR CAMPO DE SELECT DE 02 TABLAS MSSQL

Posted: Mon Apr 20, 2020 6:33 am
by Angel Miguel
Moises:

El error que se presenta es el siguiente:

NO IMPLEMENTADO
Source: Provider
NativeError: -2147467263
Error Source: Provider
Sql State:

El problema radica en que la construccion del query, es por la union de 03 tablas, para luego solo requerir actualizar un campo de una tabla, por ello aplico lo siguiente:

oRsDir:Properties("Unique Table"):Value := "DIRECCION"

En las recordset donde uso 01 tabla, aplico el mismo codigo y la actualización se realiza sin problemas.

Gracias Moises y a todos.

Saludos

Re: ADO: ACTUALIZAR CAMPO DE SELECT DE 02 TABLAS MSSQL

Posted: Mon Apr 20, 2020 2:04 pm
by Armando
Ángel Miguel:

Te voy a contar mi experiencia con SELECT que usan LEFT JOIN, ya sea de dos o mas tablas,
mi problema es que cuando elimino el registro de una de las dos tablas con oRs:Delete se
eliminan los registros de ambas tablas, por favor prueba y ya nos contaras.

Tal ves por ahí va tu problema, mi solución?, no usar oRs:Update u oRs:Delete, utiliza
el comando UPDATE o DELETE según sea el caso.

Saludos

Re: ADO: ACTUALIZAR CAMPO DE SELECT DE 02 TABLAS MSSQL

Posted: Mon Apr 20, 2020 3:28 pm
by gmart1
Hola, mi experiencia con MySQL es que en un Select combinado con Join no se puede actualizar un campo, no lo permite el conector ODBC.

Mi solución es abrir la tabla sin el Join y posicionarme en el mismo ID, actualizar y cerrar el objeto ADO, por último un reQuery del select original.

Un saludo.

Re: ADO: ACTUALIZAR CAMPO DE SELECT DE 02 TABLAS MSSQL

Posted: Tue Apr 21, 2020 5:43 am
by Angel Miguel
Amando y Gmart1:
Aplique el UPDATE respetivo, seguido del requery respectivo al recordset, con ello di solución a mi problema. Muchas Gracias por su tiempo y apoyo.

Nages:
Será factible tu comentario sobre la limitaciòn que presenta ado para _. Gracias de antemano.