OT: Clase TODBC conectar MS-SQL

OT: Clase TODBC conectar MS-SQL

Postby Alin » Sat May 09, 2020 3:58 am

Hola Antonio,
Lo que me comentas de que se ha hecho correctamente por el valor devuelto, no sé, yo reviso las tablas en las que hago pruebas y ninguna tiene el dato insertado, son simples tablas sin regla de negocio que pudiera estar afectando algo, incluso también probé con la base de datos AdventureWorksLT2014 y nada, no se inserta la fila.

Qué más puedo intentar?.

Dejo aquí nuevamente el código:

Code: Select all  Expand view  RUN
#require "hbodbc"
 
PROCEDURE MAIN()
   LOCAL dsFunctions
   LOCAL connection
   
   REQUEST HB_CODEPAGE_ESMWIN
   SET( _SET_CODEPAGE, "ESMWIN" )
   HB_CDPSELECT( "ESMWIN" )
   
   SET( _SET_DATEFORMAT, "dd/mm/yyyy" )
   SET( _SET_EPOCH, 2000 )  
   SET DECIMALS TO 2
   SET FIXED ON
 
   connection := 'Driver={SQL Server};Server=SERVER\INSTANCE;Database=Database;UID=UI;PWD=PWD;'
   
   dsFunctions := TODBC():New( connection )
 
   WITH OBJECT dsFunctions
 
      :SetSQL( "SELECT TOP 5 CCODIGOAGENTE, CNOMBREAGENTE FROM admAgentes WHERE CIDAGENTE > 0" )
      :Open()
      :First()
     
      DO WHILE ! :Eof()
         ? :FieldByName( "CCODIGOAGENTE" ):Value, :FieldByName( "CNOMBREAGENTE" ):Value
         :Skip()
      ENDDO
      //wait
 
      ? :ExecSQL("INSERT INTO admAgentes (CCODIGOAGENTE, CNOMBREAGENTE) VALUES('1000', 'Javier ODBC')" )
      :Close()
 
   ENDWITH
 
   dsFunctions:Destroy()
   
RETURN


Gracias por tu tiempo.

Saludos,
Javier
Alin
 
Posts: 18
Joined: Mon Dec 06, 2010 6:35 pm

Re: OT: Clase TODBC conectar MS-SQL

Postby Rick Lipkin » Sat May 09, 2020 1:43 pm

Javier

I still like Sqloledb for Sql Server .. I know Microsoft has been telling us for years that oledb will be depreciated ... and that was 5 or 6 years ago .. nice thing about using Sqloledb is that the client is already part of the Windows operation system and you do not have to configure it for each workstation like odbc .. here is the connection string to Sqloledb :

Code: Select all  Expand view  RUN

xPROVIDER := "SQLOLEDB"
xSOURCE   := "RICKLIPKIN-PC\SQLEXPRESS"
xCatalog  := "yourdatabase"
xUserId   := "YourUserid"
xPASSWORD := "YourPassword"

xString := 'Provider='+xPROVIDER+';Data Source='+xSOURCE+';Initial Catalog='+xCATALOG+';User Id='+xUSERID+';Password='+xPASSWORD

// global connection string
xConnect := CREATEOBJECT( "ADODB.Connection" )

TRY
   xConnect:Open( xString )
CATCH oErr
   Saying := "Could not open a Global Connection to Database "+xSource
   MsgInfo( Saying )
   RETURN(.F.)
END TRY
 


Rick Lipkin
User avatar
Rick Lipkin
 
Posts: 2666
Joined: Fri Oct 07, 2005 1:50 pm
Location: Columbia, South Carolina USA

Re: OT: Clase TODBC conectar MS-SQL

Postby Alin » Sun May 10, 2020 5:41 am

Hola Rick,
Gracias por responder, lo que sucede es que desde hace un par de años me conecto a MS-SQL con ADO, el tema es que según entiendo createobject es sólo para Windows con la lib hbwin, en este momento mi intención es hacer algunas pruebas y conectar por ODBC que entiendo podría incluso trabajar en un ambiente Linux.

Saludos,
Javier
Alin
 
Posts: 18
Joined: Mon Dec 06, 2010 6:35 pm

Re: OT: Clase TODBC conectar MS-SQL

Postby Rick Lipkin » Mon May 11, 2020 12:25 am

Javier

I just googled "connecting to sql server from linux" .. lots of information there using ODBC .. also check out this link on setting up a Sql Server instance on linux ..

[url]
https://docs.microsoft.com/en-us/sql/li ... rver-ver15
[/url]


Hope this helps.

Rick Lipkin
User avatar
Rick Lipkin
 
Posts: 2666
Joined: Fri Oct 07, 2005 1:50 pm
Location: Columbia, South Carolina USA

Re: OT: Clase TODBC conectar MS-SQL

Postby Alin » Fri May 15, 2020 11:59 pm

Hola,
Gracias a la ayuda de Antonio, esto está funcionando:

Code: Select all  Expand view  RUN
#require "hbodbc"

PROCEDURE MAIN()
   LOCAL dsFunctions
   LOCAL connection
   
   REQUEST HB_CODEPAGE_ESMWIN
   SET( _SET_CODEPAGE, "ESMWIN" )
   HB_CDPSELECT( "ESMWIN" )
   
   SET( _SET_DATEFORMAT, "dd/mm/yyyy" )
   SET( _SET_EPOCH, 2000 )  
   SET DECIMALS TO 2
   SET FIXED ON

   connection := 'Driver={SQL Server};Server=SERVER\INSTANCE;Database=Database;UID=UI;PWD=PWD;'
   
   dsFunctions := TODBC():New( connection )

   WITH OBJECT dsFunctions

      :SetSQL( "SELECT CCODIGOAGENTE, CNOMBREAGENTE FROM admAgentes WHERE CIDAGENTE > 0" )
      :Open()
      :First()
     
      DO WHILE ! :Eof()
         ? :FieldByName( "CCODIGOAGENTE" ):Value, :FieldByName( "CNOMBREAGENTE" ):Value
         :Skip()
      ENDDO

      :Close()  // cierras el recordset actual Antonio                                                         // Como comentario también funciona
      ? :SetSQL( "INSERT INTO admAgentes (CCODIGOAGENTE, CNOMBREAGENTE) VALUES('250', 'Antonio Linares')" )    // funciona
      //? :SetSQL( "UPDATE admAgentes SET CNOMBREAGENTE='PARADA' WHERE CCODIGOAGENTE='24'" )                   // funciona
      //? :SetSQL( "DELETE FROM admAgentes WHERE CCODIGOAGENTE='28'" )                                         // funciona
      IF !:Open()  // Antonio ** IMPORTANTE **
         ? dsFunctions:SQLErrorMessage()
      ENDIF

      :Close()

   ENDWITH

   dsFunctions:Destroy()
   
RETURN
//eof
 


Saludos,
Javier
Alin
 
Posts: 18
Joined: Mon Dec 06, 2010 6:35 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 83 guests