error en tabla temporal mssql

error en tabla temporal mssql

Postby artu01 » Sat Mar 02, 2019 12:29 am

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  Expand view

    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




 
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: error en tabla temporal mssql

Postby artu01 » Tue Mar 05, 2019 12:51 am

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
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: error en tabla temporal mssql

Postby cmsoft » Tue Mar 05, 2019 11:11 am

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
User avatar
cmsoft
 
Posts: 1289
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: error en tabla temporal mssql

Postby cnavarro » Tue Mar 05, 2019 11:41 am

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.
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: error en tabla temporal mssql

Postby Rick Lipkin » Tue Mar 05, 2019 4:16 pm

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
User avatar
Rick Lipkin
 
Posts: 2665
Joined: Fri Oct 07, 2005 1:50 pm
Location: Columbia, South Carolina USA

Re: error en tabla temporal mssql

Postby artu01 » Wed Mar 06, 2019 12:45 am

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
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: error en tabla temporal mssql

Postby Armando » Wed Mar 06, 2019 12:54 am

artu01:

Disculpa pero, uso tablas temporales (MYSQL) frecuentemente y son altamente
confiables. Yo sí te las recomiendo.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3211
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: error en tabla temporal mssql

Postby cmsoft » Wed Mar 06, 2019 11:06 am

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  Expand view
oApp:oServer:Execute("";
    + "CREATE TEMPORARY TABLE IF NOT EXISTS ppru ";
    +"( `numero` VARCHAR(6) NOT NULL ) ENGINE=INNODB DEFAULT CHARSET=utf8")
User avatar
cmsoft
 
Posts: 1289
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: error en tabla temporal mssql

Postby artu01 » Wed Mar 06, 2019 9:08 pm

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
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: error en tabla temporal mssql

Postby Armando » Wed Mar 06, 2019 10:01 pm

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  Expand view

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
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3211
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: error en tabla temporal mssql

Postby artu01 » Wed Mar 06, 2019 11:45 pm

Excelente Armando!

Gracias por tu código lo analizare y adecuare a mis necesidades, si necesito ayuda te la pedire
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: error en tabla temporal mssql

Postby Armando » Thu Mar 07, 2019 2:35 am

artu01:

Este es mi correo por si necesitas algo

estbucarm @ Gmail . com

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3211
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: error en tabla temporal mssql

Postby artu01 » Sat Mar 09, 2019 12:26 am

Code: Select all  Expand view

// 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
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: error en tabla temporal mssql

Postby Armando » Sat Mar 09, 2019 12:54 am

artu01:

oApp es una clase donde defino varias DATAs entre otras oCon que efectivamente
contiene el objeto de la conexión.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3211
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: error en tabla temporal mssql

Postby artu01 » Mon Mar 11, 2019 2:19 pm

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  Expand view

    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

 
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 46 guests