Page 1 of 2
error en tabla temporal mssql
Posted: Sat Mar 02, 2019 12:29 am
by artu01
Gente:
Creo una tabla temporal con ado en mssql, pero esa tabla no la veo en el Microsoft SQL Server Management, en donde esta en tempdb?
La tabla tiene un solo campo, le inserto un registro, quiero mostrar su contenido y me bota el msje:
Error description: (DOS Error -2147352567) WINOLE/1007 No se encontró el elemento en la colección que corresponde al nombre o el ordinal solicitado. (0x800A0CC1): ADODB.Recordset
Aquí esta mi fuente
Code: Select all
oCon:=AbreConexBd()
cSQL := "CREATE TABLE #ppru"
cSQL += "("
cSQL += "numero CHAR(6) NOT NULL "
cSQL += ")"
Try
oCon:Execute( cSQL )
Catch
MsgInfo( "Table Create ppru Failed" )
oDlg:End()
Return(.f.)
End try
oRs := TOleAuto():New( "ADODB.Recordset" )
oRs:CursorType := 1 // opendkeyset
oRs:CursorLocation := 3 // local cache
oRs:LockType := 3 // lockoportunistic
cSQL := "SELECT * from [#ppru]"
TRY
oRS:Open(cSQL,oCon )
CATCH oErr
MsgInfo( "Error in Opening #ppru table" )
oCon:Close()
RETURN(.F.)
END TRY
oRs:CLose()
cSQL := " insert into [#ppru] (numero) "
cSQL += "values('123456') "
oRs := TOleAuto():New( "ADODB.Recordset" )
oRs:CursorType := 1 // opendkeyset
oRs:CursorLocation := 3 // local cache
oRs:LockType := 3 // lockoportunistic
oRS:Open(cSQL,oCon )
msgalert(oRs:Fields("numero"):Value) //>>>>>>> AQUI ME BOTA ERROR <<<<<<<<<<<<<<
…
…
…
Function AbreConexBD()
LOCAL cCString, oError, oCon1
xPROVIDER := "SQLOLEDB" // oledb provider
xSOURCE := "PYSASERVER" // sql server name
xCATALOG := "PysaBD" // sql server database
xUSERID := "sa"
xPASSWORD := "Pysa123456"
xConnect := 'Provider='+xPROVIDER+';Data Source='+xSOURCE+';Initial Catalog='+xCATALOG+';User Id='+xUSERID+';Password='+xPASSWORD
TRY
oCon1 := CreateObject( "ADODB.Connection" )
oCon1:Open( xConnect )
CATCH oError
MsgStop( oError:Description )
END
Return oCon1
Re: error en tabla temporal mssql
Posted: Tue Mar 05, 2019 12:51 am
by artu01
Gente
para los que trabajan con tablas sql y no con dbf, como hacen para guardar un detalle de una factura hasta que el usuario le de guardar
en donde lo almacenan, en arreglos? , yo quiero hacerlo con tablas temporales pero no me sale, lo crea, pero no lo veo en el visor de management de
sql esa tabla que he creado....tengo entendido que las tablas temporales mueren cuando cierro la conexion
Re: error en tabla temporal mssql
Posted: Tue Mar 05, 2019 11:11 am
by cmsoft
No se como funciona en MSSql, pero en MySql a las tablas temporales solo la ve la sesion que la generó. Y no la ves en la estructura de la base de datos, pero si haces un select o un insert sobre esa tabla, funciona como una tabla cualquiera.
Para ver si esta generada, puedes usar el comando SHOW CREATE TABLE mitabla, y te mostrara la estructura de la tabla temporal
Re: error en tabla temporal mssql
Posted: Tue Mar 05, 2019 11:41 am
by cnavarro
MSSQL:
Estas tablas son creadas en la base de datos tempdb, en la carpeta llamada Temporary Tables
Si cerramos la conexión actual, esta tabla se eliminará. Por ello, este tipo de tablas temporales es conocida como Tablas Temporales Locales.
Re: error en tabla temporal mssql
Posted: Tue Mar 05, 2019 4:16 pm
by Rick Lipkin
artu01
I do not create my temp tables in SqlServer or Ms Access .. just because ( especially in access ) the database grows in size even if you create a temp table and then delete it .. If I create reports or need a disposable Temp Table I use .dbf on the local client .. then delete it when I am done.
Rick Lipkin
Re: error en tabla temporal mssql
Posted: Wed Mar 06, 2019 12:45 am
by artu01
gracias carlos, cesar y rick
por sus comentarios no es recomendable usar tablas temporales, por otro lado no deseaba seguir usando dbf para crear tablas temporales, pero si no hay forma continuare con ellos
thanks carlos, cesar y rick
for the comments its not recommendable using temporal tables, by other side, i didnt want continue using dbf for making temporal tables, but if its not possible continuing with them
Re: error en tabla temporal mssql
Posted: Wed Mar 06, 2019 12:54 am
by Armando
artu01:
Disculpa pero, uso tablas temporales (MYSQL) frecuentemente y son altamente
confiables. Yo sí te las recomiendo.
Saludos
Re: error en tabla temporal mssql
Posted: Wed Mar 06, 2019 11:06 am
by cmsoft
Artu01:
Tal vez no me exprese bien. Yo no tengo conocimientos en MSSql. Pero en MySql, tal cual te dice Armando, yo uso muchisimo las tablas temporales, y son altamente confiables.
Code: Select all
oApp:oServer:Execute("";
+ "CREATE TEMPORARY TABLE IF NOT EXISTS ppru ";
+"( `numero` VARCHAR(6) NOT NULL ) ENGINE=INNODB DEFAULT CHARSET=utf8")
Re: error en tabla temporal mssql
Posted: Wed Mar 06, 2019 9:08 pm
by artu01
Armando wrote:artu01:
Disculpa pero, uso tablas temporales (MYSQL) frecuentemente y son altamente
confiables. Yo sí te las recomiendo.
Saludos
Gracias Armando y Cesar
Armando podrias enviarme un ejemplo donde utilices la tabla temporal
Re: error en tabla temporal mssql
Posted: Wed Mar 06, 2019 10:01 pm
by Armando
artu01:
Uso ADO puro ninguna librería de terceros, no es que sean malas, simplemente
no las necesito, aquí va un ejemplo
Code: Select all
STATIC FUNCTION UpdWrk(oDlg,aGets,oBrx)
IF lAddWrk
oRsWrk:AddNew()
ENDIF
oRsWrk:Fields("WRK_CTD"):Value := oHdr:CTD
oRsWrk:Fields("WRK_UDM"):Value := oHdr:UDM
oRsWrk:Fields("WRK_POR"):Value := oHdr:POR
oRsWrk:Fields("WRK_DES"):Value := oHdr:DES
oRsWrk:Fields("WRK_PUN"):Value := oHdr:PUN
IF oHdr:POR
oRsWrk:Fields("WRK_IMP"):Value := ROUND(ROUND(oRsWrk:Fields("WRK_CTD"):Value / 100,5) * oRsWrk:Fields("WRK_PUN"):Value,2)
ELSE
oRsWrk:Fields("WRK_IMP"):Value := ROUND(oRsWrk:Fields("WRK_CTD"):Value * oRsWrk:Fields("WRK_PUN"):Value,2)
ENDIF
oRsWrk:UpDate()
oRsWrk:Requery()
oBrx:GoTop()
oBrx:Refresh()
RETURN(.T.)
STATIC FUNCTION CreaTabla()
// Definimos el nombre de la tabla usando la constante A1 y la hora de creación
// con objeto de evitar duplicidad de nombre con otro usuario
cTabNam := "A1" + SUBSTR(TIME(),1,2) + SUBSTR(TIME(),4,2) + SUBSTR(TIME(),7,2)
// Definimos el comando para crear la tabla con una estructura a mis necesidades
// Ojo la defino como TEMPORARY
cCmdSql := "CREATE TEMPORARY TABLE IF NOT EXISTS " + cTabNam + " (" +;
"WRK_ROW INT AUTO_INCREMENT," +;
"WRK_CTD DECIMAL(09,3) DEFAULT 0.000 COMMENT 'Cantidad solicitada'," +;
"WRK_UDM CHAR(03) DEFAULT '' COMMENT 'Unidad de medida'," +;
"WRK_POR BIT DEFAULT 0 COMMENT 'Es porcentaje ?'," +;
"WRK_DES TEXT COMMENT 'Descripción'," +;
"WRK_PUN DECIMAL(13,2) DEFAULT 0.0000 COMMENT 'Precio unitario'," +;
"WRK_IMP DECIMAL(13,2) DEFAULT 0.00 COMMENT 'Importe'," +;
"PRIMARY KEY(WRK_ROW))" +;
"ENGINE = InnoDB COMMENT 'Detalle de factura';"
// Ejecutamos el comando para crear la tabla temporal
TRY
oApp:oCon:Execute(cCmdSql)
CATCH oError
MsgInfo("La tabla " + cTabNam + " NO pudo ser creada",oApp:cAplicacion)
oApp:oCon:ShowError()
RETURN(.F.)
END
// Creamos el recordset para abrir la tabla temporal
TRY
oRsWrk := TOleAuto():New("adodb.recordset")
CATCH oError
MsgStop( "No se ha podido crear el RECORDSET de LA TABLA DE PASO !", oApp:cAplicacion)
oRsWrk := NIL
oApp:oCon:ShowError()
RETURN(.F.)
END
// Definimos las propiedades del recordset, entre otras el nobre de
// la tabla que queremos abrir
oRsWrk:CursorLocation := adUseClient
oRsWrk:LockType := adLockOptimistic
oRsWrk:CursorType := adOpenDynamic
oRsWrk:Source := "SELECT " +;
"* " +;
"FROM " + cTabNam
// Ejecutamos el comando para abrir la tabla
TRY
oRsWrk:Open(oRsWrk:Source,oApp:oCon)
CATCH oError
MsgStop( "No se ha podido abrir el RECORDSET de la TABLA DE PASO !", oApp:cAplicacion)
oApp:oCon:ShowError()
RETURN(.F.)
END
RETURN(.T.)
Y tengo un xBrowse donde se muestra el contenido de la tabla temporal, si me dices
específicamente que necesitas lo podemos ver.
Saludos
Re: error en tabla temporal mssql
Posted: Wed Mar 06, 2019 11:45 pm
by artu01
Excelente Armando!
Gracias por tu código lo analizare y adecuare a mis necesidades, si necesito ayuda te la pedire
Re: error en tabla temporal mssql
Posted: Thu Mar 07, 2019 2:35 am
by Armando
artu01:
Este es mi correo por si necesitas algo
estbucarm @ Gmail . com
Saludos
Re: error en tabla temporal mssql
Posted: Sat Mar 09, 2019 12:26 am
by artu01
Code: Select all
// Ejecutamos el comando para crear la tabla temporal
TRY
oApp:oCon:Execute(cCmdSql)
CATCH oError
MsgInfo("La tabla " + cTabNam + " NO pudo ser creada",oApp:cAplicacion)
oApp:oCon:ShowError()
RETURN(.F.)
END
Armando podrias mostrarme la definición de oApp?
oCon entiendo que es el objeto conexion pero oApp que viene hacer?
Gracias
Re: error en tabla temporal mssql
Posted: Sat Mar 09, 2019 12:54 am
by Armando
artu01:
oApp es una clase donde defino varias DATAs entre otras oCon que efectivamente
contiene el objeto de la conexión.
Saludos
Re: error en tabla temporal mssql
Posted: Mon Mar 11, 2019 2:19 pm
by artu01
Ok Armando, no he probado este codigo pero quiere decir que si lo hago de esta forma debería funcionar?,
me parece que anteriormente quize hacerlo de esta manera y me salia error como que oCon no tenia ese metodo o algo por el estilo
Code: Select all
oCon:=AbreConexBd()
cTabNam:='Prueba'
cCmdSql := "CREATE TEMPORARY TABLE IF NOT EXISTS " + cTabNam + " (" +;
"WRK_ROW INT AUTO_INCREMENT," +;
"WRK_CTD DECIMAL(09,3) DEFAULT 0.000 COMMENT 'Cantidad solicitada'," +;
"WRK_UDM CHAR(03) DEFAULT '' COMMENT 'Unidad de medida'," +;
"WRK_POR BIT DEFAULT 0 COMMENT 'Es porcentaje ?'," +;
"WRK_DES TEXT COMMENT 'Descripción'," +;
"WRK_PUN DECIMAL(13,2) DEFAULT 0.0000 COMMENT 'Precio unitario'," +;
"WRK_IMP DECIMAL(13,2) DEFAULT 0.00 COMMENT 'Importe'," +;
"PRIMARY KEY(WRK_ROW))" +;
"ENGINE = InnoDB COMMENT 'Detalle de factura';"
Try
oCon:Execute( cCmdSql )
Catch
MsgInfo( "Fallo en la creacion de la tabla" )
oDlg:End()
Return(.f.)
End try
Function AbreConexBD()
LOCAL cCString, oError, oCon1
xPROVIDER := "SQLOLEDB" // oledb provider
xSOURCE := "PYSASERVER" // sql server name
xCATALOG := "PysaBD" // sql server database
xUSERID := "sa"
xPASSWORD := "Pysa123456"
xConnect := 'Provider='+xPROVIDER+';Data Source='+xSOURCE+';Initial Catalog='+xCATALOG+';User Id='+xUSERID+';Password='+xPASSWORD
TRY
oCon1 := CreateObject( "ADODB.Connection" )
oCon1:Open( xConnect )
CATCH oError
MsgStop( oError:Description )
END
Return oCon1