Ayuda con MS-SQL

HMG en Español

Moderator: Rathinagiri

Post Reply
jorge.posadas
Posts: 192
Joined: Mon May 19, 2014 7:43 pm
DBs Used: DBF, SQLite, MS-SQL, ACCESS, MariaDB (en proceso)
Location: Morelia, Mich. México
Contact:

Ayuda con MS-SQL

Post by jorge.posadas »

Grupo
Me pidieron hacer una pequeña aplicación que Inserte/Borre/Actualice/Consulte una base de datos de SQL (me refiero a SQL de Microsoft),
ya tengo el 80% de avance, PEROO se me presentó dos problemas:
1- ¿cómo puedo saber si mi aplicación ya se conectó a la base de datos, por el momento sino se conecta manda un error y luego de sale de la aplicación y yo deseo mandar un mensaje al usuario de NO SE PUDO CONECTAR A LA BASE DE DATOS, INTENTE MÁS TARDE

2- Cuando hago un INSERT o un UPDATE, puede que me dé un error cuando intento insertar o actualizar, ¿Cómo le hago para "cachar" ese error de que no puedo ejecutar la acción?, para que de igual manera mandarle un mensaje al usuario.

De antemano muchas gracias por la ayuda
Cordialmente

POSADAS SOFTWARE
Jorge Posadas Ch.
Programador independiente
Morelia, Mich.
M é x i c o .
Movil +52 44 3734 1858
SKYPE: jorge.posadasch
Email: jorge.posadas@posoft.mx
User avatar
serge_girard
Posts: 3342
Joined: Sun Nov 25, 2012 2:44 pm
DBs Used: 1 MySQL - MariaDB
2 DBF
Location: Belgium
Contact:

Re: Ayuda con MS-SQL

Post by serge_girard »

1) When you make the connection; check return value
2) idem

Serge
There's nothing you can do that can't be done...
User avatar
edufloriv
Posts: 240
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

Re: Ayuda con MS-SQL

Post by edufloriv »

Hola Jorge,

Si estás usando ADO para conectarte me parece que buscas una función del propio objeto que atrape el error (como lo tiene Mysql). Me parece que en algún momento busque lo mismo y no lo encontré, yo uso esta función:

Code: Select all

*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
* FUNCION   : INICONEXION
* COMENTARIO: CONEXION AL SERVIDOR MS-SQL.
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

PROC INICONEXION

LOCAL oError
LOCAL cIPConect   := ""
LOCAL cIPAddress  := ""
LOCAL cIPUsuario  := ""
LOCAL cIPPassword := ""
LOCAL cIPCatalogo := ""

PUBLIC oConexion
PUBLIC INI_CONEX    := .F.

   IF FILE('c:\farmacom\ipdata.txt')
      aIpData := Txt2Array('c:\farmacom\ipdata.txt')
      cIpAddress  := UNCRYPT( aIpData[1] )
      cIpUsuario  := UNCRYPT( aIpData[2] )
      cIpPassword := UNCRYPT( aIpData[3] )
      cIpCatalogo := UNCRYPT( aIpData[4] )
   ELSE
      msginfo('no existe el archivo de conexión al servidor.')
      Win_InfoFarma.Release
   ENDIF

   cIPConect := "Provider=SQLOLEDB;Network Library=DBMSSOCN;Data Source=" + cIpAddress + ";Initial Catalog=" + cIpCatalogo +";User Id=" + cIPUsuario + ";Password=" + cIpPassword + ";"

   BEGIN SEQUENCE
      oConexion := TOleauto():New('ADODB.Connection')
      oConexion:ConnectionTimeout := 120
      oConexion:Open(cIPConect)
      INI_CONEX := .T.
   RECOVER USING oError
      MsgStop('No se pudo conectar al servidor SQL '+chr(13)+;
              'el servidor retornó el siguiente error: '+chr(13)+;
              oError:Operation+CRLF+oError:Description,"Conexión Ado")
      Win_InfoFarma.Release
   END SEQUENCE

RETURN
Llegué a esta conclusión porque el propio microsoft pone un ejemplo para vb:

Code: Select all

    Dim Conn1 As New adodb.Connection
    Dim Cmd1 As New adodb.Command
    Dim Errs1 As Errors
    Dim Rs1 As New adodb.Recordset
    
    Dim i As Integer
    Dim AccessConnect As String
    
    ' Error Handling Variables
    Dim errLoop As Error
    Dim strTmp As String
    
    AccessConnect = "Driver={Microsoft Access Driver (*.mdb)};" & _
    "Dbq=nwind.mdb;" & _
    "DefaultDir=C:\program files\devstudio\vb;" & _
    "Uid=Admin;Pwd=;"
    
    '---------------------------
    ' Connection Object Methods
    '---------------------------
    
    On Error GoTo AdoError ' Full Error Handling which traverses
    ' Connection object
    
    ' Connection Open method #1: Open via ConnectionString Property
    Conn1.ConnectionString = AccessConnect
    Conn1.Open
    Conn1.Close
    Conn1.ConnectionString = ""
    
    ' Connection Open method #2: Open("[ODBC Connect String]","","")
    Conn1.Open AccessConnect
    Conn1.Close
    
    ' Connection Open method #3: Open("DSN","Uid","Pwd")
    
Siendo AdoError:

Code: Select all

 AdoError:
    i = 1
    On Error Resume Next
    
    ' Enumerate Errors collection and display properties of
    ' each Error object (if Errors Collection is filled out)
    Set Errs1 = Conn1.Errors
    For Each errLoop In Errs1
        With errLoop
            strTmp = strTmp & vbCrLf & "ADO Error # " & i & ":"
            strTmp = strTmp & vbCrLf & " ADO Error # " & .Number
            strTmp = strTmp & vbCrLf & " Description " & .Description
            strTmp = strTmp & vbCrLf & " Source " & .Source
            i = i + 1
        End With
    Next
Si logras averiguar algo distinto te agradeceré me lo hagas saber, ya que me interesa también poder realizar el "trapping" de conectividad al server.

Eduardo Flores Rivas


LIMA - PERU
jparada
Posts: 433
Joined: Fri Jan 23, 2009 5:18 pm

Re: Ayuda con MS-SQL

Post by jparada »

Hola Jorge,
No sé si no entendí el requerimiento, no te vale con Try... Cath?

Saludos,
Javier
Post Reply