Visual Basic.NET - Generar el índice automáticamente con Identidad en Sql Server

 
Vista:
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 17/05/2020 20:24:32
Hola.
Tengo un proyecto funcionando pero para Insertar utilizo una función que generar el índice y lo que quiero es generarlo con "Identidad" en el Sql Server He tratado de encontrar algún ejemplo pero todo lo que he encontrado no he visto la forma de que funcione con el código tal como lo tengo montado. En el Sql Server ya he activado la identidad y el incremento en uno.

Quería a ver si alguien me puede indicar que me falta.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Function Insertar(eCalle As Calle) As Boolean
    ' eCalle.IdCalle = GetMaxIdCalle()
    Dim Result As Boolean = False
    Try
        Dim Sql As String
        Using Conn As New SqlConnection(Conexion.ConnectionString)
            Conn.Open()
            Dim param As New DynamicParameters()
            param.Add("@Id", eCalle.IdCalle, dbType:=DbType.Int32)
            param.Add("@Calle", eCalle.Calle, dbType:=DbType.String)
            Sql = "INSERT INTO Calles Values (@Id,@Calle), SELECT @@Identity"
            Dim OkPago = Conn.Execute(Sql, param, commandType:=CommandType.Text)
            If OkPago = 0 Then
                Throw New Exception("Error al insertar Calles")
            End If
            Result = True
        End Using
    Catch ex As Exception
        Throw New Exception(ex.Message)
    End Try
    Return Result
End Function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 17/05/2020 22:25:27
Hola Miguel,

Me parece que en SQLServer,el campo Id (que es PrimaryKey) es "Auto Increment". En este caso, no puedes lo modificar con tu codigo y no puedes escribir este campo en el comando INSERT.
Este estaba el sujeto de los mensajes "NO ME GUARDA EL REGISTRO EN LA TABLA SQLSERVER" del 10 de mayo.

Buenas noches
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 18/05/2020 13:13:16
Hola Phil.
El Sql Server no funciona así. yo hasta ahora hacia una función para crear el índice Primary Key la cual se pone en el mismo campo del Primary Key del Insert que vas hacer. Pero esta forma de trabajar solo sirve para acceder una sola persona a la B.D. de otra forma se producen problemas por retardos por el exceso de tiempo que necesita.
Por esa razón el SQl Server está preparado para que cuando creas una Primary Key tienes una opción que es la "Identidad" la cual has de activarla y además decirle que incremento quiere que te haga. y entonces si se encarga el Sql de incrementar el registro en el mismo momento que aceptas. Pero si hace esto se lo tienes que indicar en la clase del Insert. Vi una clase de C# donde usa la Identidad y lo convertí a Visual Basic pero no funciona.
Si quieres ver esto como se hace me dices pues no tengo ningún inconveniente y dedicarte el tiempo que haga falta.
Aprovecho este contacto para decirte que te olvides del Entity Framework pues se ha desechado. La razón es que con el Dapper es más rápido y economiza código. Tu entiendo que trabajas con Visual Studio 2019 u otro inferior pues te aviso que en Noviembre sale el Visual 5 que es multiplataforma y Microsoft deja de mantener el Visual Studio 2019 y el único que sigue entre otros es el C# así que ve pensando en migrar pues de lo contrario quedarás fuera.

Gracias por haber contactado y un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 18/05/2020 14:11:58
Muchas gracias para las informaciones, Miguel.

Con el servidor SQL, trabajas a un nivel más alto que mi

No soy obligado de seguir las futuras evoluciones de VisualStudio porque no más desarrollo ni enseño. Ayudo en este foro y en foro Develeppez.net (francés). En estés foros, VB.net tiene todavía una buena futura. No más tengo otro uso de la programación.

Buenas tardes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 18/05/2020 18:03:01
Yo tampoco tengo ni necesidad ni obligación pero desde hace 10 años que me jubile los días se me hacían interminables. Así que como el Visual Basic lo conocía ya que he estado programando interfeís para simplificar el trabajo de los delineantes con Unigrafis y antes con otros productos y sin embargo en B.D. no había andado nunca así que no me lo pensé y ahora me dedico ha montar B.D. con Sql Server y hacer algún proyectos para algunos hijos de amigos que han empezado con negocios. Esto lo hago por las tardes y por las mañanas estoy 3 ó 4 horas andando por el monte y esta es mi simple vida después de 50 años trabajando.

Y hay un dicho "que que el saber no ocupa espacio en la mente".

Un saludo Phil y para cualquier cosa que este a mi alcance tienes un amigo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 18/05/2020 23:42:31
Hola Miguel,

He visto bien tu documento y comprendo los diferentes niveles de acceso a la primera llave.

Pero estes detalles están importantes para las grandes DB con muchos clientes. Para un red con algunas decenas de clientes, el sistema que verifica las “Transaction” (Begin Transaction / RoolBack / End Transaction) debería suficiente.

He nunca utilizado "Transaction" con SQL Server pero, podré buscar si lo quieres ...

Buenas noches
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 19/05/2020 00:16:28
Mi repuesta anteriore no es bien.
No es el problema de verificar la transaction pero este es obtener el identificador del ultimo registracion.
He comprendido leyendo tu documento.

Este es necesario de dormir ...
Hasta pronto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 18/05/2020 23:18:10
Ya me ha explicado como es una persona del foro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Function Insertar(eCalle As Calle) As Boolean
    Dim Result As Boolean = False
    Try
        Dim Sql As String
        Using Conn As New SqlConnection(Conexion.ConnectionString)
            Conn.Open()
            Dim param As New DynamicParameters()
            param.Add("@IdCalle", dbType:=DbType.Int32, direction:=ParameterDirection.Output)
            param.Add("@Calle", eCalle.Calle, dbType:=DbType.String)
            Sql = "INSERT INTO Calles Values (@Calle);Select CAST(SCOPE_IDENTITY() As INT)"
            Dim OkPago = Conn.Execute(Sql, param, commandType:=CommandType.Text)
            If OkPago = 0 Then
                Throw New Exception("Error al insertar Calles")
            End If
             Result = True
        End Using
    Catch ex As Exception
        Throw New Exception(ex.Message)
    End Try
    Return Result
End Function

Gracias y un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 19/05/2020 09:00:57
Hola Miguel,

Has hecho buen paseo este mañana ?

No comprendo tu ultimo mensaje

Comprendo todas las palabras pero no comprendo el sentido de la frase "Ya me ha explicado como es una persona del foro."

El código que envias, funciona bien ?

Tendré un poco tiempo para testar en la tarde.

Hasta pronto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 19/05/2020 11:30:03
Hola Phil.
Esa frase que quizás la simplifique mucho lo único que quiere decir es que una persona con la que tengo amistad contacto conmigo por Skipe y me aclaro lo que me faltaba. Por esa razón puse otra vez la función en el foro por si alguna persona estuviera interesada.

Y lo del paseo hasta que no quiten el confinamiento no puedo disponer de todas las horas que yo dedico al paseo matutino. Solo dispongo ahora de una hora y media por la mañana pero cuando llego a casa hago una hora de bici y otra hora de las 20:00 a las 21:00.

Observo que llevas muy bien la escritura en Castellano pero pecas un poco en el uso de los tiempos de verbos y la ausencia de algunos artículos en algunas frases.

Si quieres probar ese código antes tendrás que hablar conmigo dado que no es posible con la programación normal de Visual Basic.

Un saludo Phil
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 19/05/2020 13:12:18
Hola Miguel,

Este es curioso, este parte de la frase “como es una persona del foro” parece significar que he te hablado del usuario del foro, explicando sobre su personalidad, si es simpático o no, si culto o no, …

pero pecas un poco en el uso de los tiempos de verbos y la ausencia de algunos artículos en algunas frases.” Tienes razón! Soy demasió perezoso para estudiar la gramar. Y generalmente, el idioma se aprende durante todos los años donde lo oímos. Lo veo con expresiones en francés y me pregunto como un español podía comprender.
Pero, oigo difícilmente, mismo en francés. Este necesario que soy en ambiente calma y que la persona habla de manera clara y articula bien. Entonces, nunca oigo el idioma español, a veces a la TV, pero hablan demasió rápido.

Sobre tu código, mi idea es de lo testar en VB normal. Más exactamente, quiero recuperar el Id creado por un Insert para lo utilizar en otro registro. Este es el documento que envías ayer que hace me dado la idea. Este el escenario:
Es necesario de poner en la DB, las informaciones de una Factura para un nuevo cliente.
En este caso, tenemos que añadir el cliente en la tabla de los clientes y después solamente, tenemos que añadir las informaciones de la factura : numero, fecha, …, y el identificador del cliente.
Este es necesario de recuperar identificador del cliente después su Insert y ante el Insert en la tabla de las facturas.

Espero tener un poco tiempo al fin de la tarde.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 19/05/2020 17:12:56
Para hacerlo en visual normal este código no te sirve pues a parte de ser una programación de ncapas y en la capa donde Inserto el registro utilizo el Dapper. La finalidad de esta función entre otras cosas a parte se ser rápida es que simplifica mucho código,

Lo ideal sería si te parece hablar por el skipe claro es siempre y cuando te defiendas en Español pues yo el Frances aunque hice tu idioma y sacaba notables la última vez que estuve en Francia y chapurre un poco fue aproximadamente hace 40 años y no lo he tocado desde entonces.

Unsaludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 19/05/2020 21:35:21
"... Lo ideal sería si te parece hablar por el skipe claro es siempre y cuando te defiendas en Español ..."
Muchas gracias, mas tarde ..., quizá ....

Para el VB, no sera este noche, también mas tarde

Muy buenas noches
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 19/05/2020 23:32:15
Cuando te venga bien.

Hasta mañana
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 20/05/2020 23:12:42
Hola Miguel,

He hecho mi prueba con SCOPE_IDENTITY, o exactamente con SELECT IDENT_CURRENT ('tablename').
Mire el documento : https://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/ para ver las diferencias entre SELECT @@ IDENTITY, SELECT SCOPE_IDENTITY () y SELECT IDENT_CURRENT.
He eligido SELECT IDENT_CURRENT.

Mira la video de mis pruebas : https://www.dropbox.com/s/jnpxm0ub7dxehob/Scoop.mp4?dl=0

El código puede ser puesto en cualquiera función. Este es el código :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
' ************** Version sin Transaction, con IDENT_CURRENT (cf. SCOOP_IDENTITY) : garantiza la recuperacion del bueno IdPers
Dim Consulta As String
 
MiConexion.Open()
 
MiComando = MiConexion.CreateCommand
MiComando.CommandType = CommandType.Text
 
Dim UltimoIdPersona As Integer
Consulta = "INSERT INTO " & NombreTablaPersonas & " (NombrePers) VALUES( '" & TBNombrePers.Text & "'); SELECT IDENT_CURRENT ('" & NombreTablaPersonas & "')"
MiComando.CommandText = Consulta
UltimoIdPersona = MiComando.ExecuteScalar()
 
MessageBox.Show(TBNombrePers.Text & " añadido")
 
Consulta = "INSERT INTO " & NombreTablaDocumentos & " (Data, XIdPers) VALUES( '" & TBData.Text & "', " & UltimoIdPersona & ")"
MiComando.CommandText = Consulta
MiComando.ExecuteNonQuery()
 
MiConexion.Close()
' **************

Buenas noches
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 21/05/2020 12:10:17
Hola Phil.
Tienes razón el código se puede poner en cualquier función ya que no requiere modificar nada de la misma tan solo añadir esos datos. También funciona sin necesidad de añadir ese código. Te mando un ejemplo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Function Insertar(eCalle As Calle) As Boolean
    Dim Result As Boolean = False
    Try
        Using Conn As New SqlConnection(Conexion.ConnectionString)
            Conn.Open()
            Dim param As New DynamicParameters()
            param.Add("@Calle", eCalle.Calle, dbType:=DbType.String)
            Dim Sql As String = "INSERT INTO Calles Values (@Calle)"
            Dim OkPago = Conn.Execute(Sql, param, commandType:=CommandType.Text)
            If OkPago = 0 Then
                Throw New Exception("Error al insertar Calles")
            End If
            Result = True
        End Using
    Catch ex As Exception
        Throw New Exception(ex.Message)
    End Try
    Return Result
End Function

Lo único que me falta es aclarar un problema surgido con el Primary Key pues cuando tienes varias tablas con relaciones cruzadas los índices hay que ponerlos como DBNULL y aunque la función se ejecuta y te genera el Primary Key de la tabla principal los índices relacionados en las tablas secundarias se quedan como NULL, no da error pero no tienes los valores en ese formulario para poder utilizarlo.
Cuando encuentre la solución te lo comunico, también te voy a mandar una función que después de ejecutarse te retorna al final de la misma el valor del Primary Key pues en caso de una cabecera de Compras ó Ventas la puedes utilizar para enlazar las líneas de detalle de las Ventas ó Compras.

Espero que me entiendas.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 21/05/2020 19:16:26
Hola Miguel,

Te envio el necesario para tu probar.

Para que SQL permite el INSERT sin escribir un valor para la PrimaryKey, tienes que ajustar los parámetros de cada PrimaryKey como muestro en este imagen y en la vidéo : https://www.dropbox.com/s/0t41bvhaqinkj67/PrimaryKeySQLServer.mp4?dl=0
PrimaryKeySQL

La llave foránea de la tabla hija debe ser un duplico de la PrimaryKey de la tabla madre. Entonces, estos índices en tablas segundarias no pueden ser Null. Si las Relaciones están definidas en la DB, SQL da un error. Si las relaciones no están escritas en la DB (este es el caso en mi proyecto), debemos escribir un valor coherente. Pero, de misma manera que en el código que he enviado ayer, siempre escribimos la tabla madre ante la tabla hija. Entonces, tenemos siempre el valor para la llave foránea de la tabla hija. Este estaba el objeto de mis pruebas.

Adjunto mi proyecto de pruebas.
Claro, tienes que crees la DB (ella pequeña con solamente 2 tablas, con poco campos) y cambia la cadena de conexión en el programa.
Para ejecutar muchas instancias del programa, tienes que lo ejecutar a partir de la carpeta del EXE (…\Bin\Debug) :
PrimaryKeySQL2

Espero que he respondido bien sobre el tema ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 22/05/2020 13:49:48
Hola Phil.
Tendrías que decirme que Sql Server estás utilizando y luego mandarme o bien un Scrip ó una Copia de seguridad según lo que uses. Yo tengo instalado en un ordenador el Sql Server 2017 y en un portátil el Sql Server 2014, si utilizas uno de estos dos cualquiera me sirve. Así puedo correr el programa y enterarme de lo que hace.

Te voy a mandar una hoja con dos ejemplos, el primero una tabla sin relaciones y las otras cuatro relacionadas.
También en un rato te mando otra hoja con el código que tienes que utilizar para cuando realices una Inserción generes y pases el índice Primario a la tabla relacionada.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 22/05/2020 19:47:42
Hola Miguel,

Mi versión es SQL Server 10 :
SQL1

SQL2

Pero la versión del servidor es sin importancia si creas las 2 tablas.
SQL02

En todo caso, deberas cambiar la cadena de conexión en el procedimiento ParametroConexion().
Este cadena se toma en las propiedades de la DB en el explorador de servidores.

Para el caso donde este te es útil, este los códigos de creación de estas tablas :

CREATE TABLE [dbo].[TDocumentos] (
[IdDoc] INT IDENTITY (20201, 1) NOT NULL,
[Data] DATE NULL,
[XIdPers] INT NOT NULL,
CONSTRAINT [PK_TDocumentos] PRIMARY KEY CLUSTERED ([IdDoc] ASC)
);

CREATE TABLE [dbo].[TPersonas] (
[IdPers] INT IDENTITY (1, 1) NOT NULL,
[NombrePers] NVARCHAR (50) NULL,
CONSTRAINT [PK_TPersonas] PRIMARY KEY CLUSTERED ([IdPers] ASC)
);

Pero, pienso que es tan fácil de crear estas tablas con la interfaz grafíca. Este interfaz puede ser diferente según la versión VisualStudio.
En el video de ayer, utilizo VS2010 y mires como es el acceso a las propiedades de una columna.
En la versión VS2013, el acceso a las propiedades de una columna están como en esta imagen:
SQL5

Este algunas imágenes con los nombres de las tablas y de los campos :
SQL3

SQL4

Miraré tu segundo mensaje luego.

Hasta pronto ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 23/05/2020 00:22:52
Hola Miguel,

Veo bien cuando tienes indicios Null.
Pero veo 2 casos, el primero no puede existir y el segundo no debería existir con un esquema diferente.

Caso 1 :
InsertaObra : IdObra es PrimaryKey y es un tipo AutoIncrement.
Nunca es Null, SQL crea el valor.
Entonces, no es necesario el código :

1
2
3
4
5
If OkObra = 0 Then
    T.Dispose()
    Throw New Exception("Error al insertar la obra")
End If
nuevaObra.IdObra = param.Get(Of Int32)("@IdObra")

En este código, OKObra puede ser NULL pues existe un error en la ejecución (ej. si IdEmpresa no existe).
Pienso que es mejor de ejecutar Conn.Execute en un Try para obtener el razón del error.
La recuperación Set @IdObra=(Select Scope_identity()) es necesaria para obtener el valor para poner en INSERT Caja.

Mismos reflexiones para INSERT Pagos en función InsertPago.

Caso 2 :
En gestión de caja para contado :
Vienes de agreda una nueva obra y creas ya registros de pagos con IdPagos = Null.
Otro esquema permite de crear un registro solamente cuando existe un pago.
Pero este es un problema de análisis y no quiero rehacer todo el análisis.
Pero, si quieres, te daré ejemplo de esquema simple con valores que existen o no.


Quizá no comprendo bien las razones de este organización del código …

Buenas noches
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 23/05/2020 08:48:23
Te explico el porque :
Las tablas Obras, Caja y cuotas si se cumple que : if okObra = 1 , nuevaObra = "Contado", if okCaja = 1 y if okCuota=1 entonces
el programa pasa por " T.Complete() " y se cargan los tres registros a la vez. Pero si un solo ok? diera 0 no se carga ningún registro.

Lo mismo pasa con Obras y PagosPendientes si if okObra = 1 y nuevaObra <> "Contado" entondes se va por PagosPendientes y si se cumple que if okPago = 1 también pasa por " T.Complete() " y se cargan el registro de Obras y PagosPendientes a la vez.

Solo me falta terminar un detalle de un cambio de última hora de algo que no me gusta y si quieres te puedo mandar todo el proyecto y una copia de la base de datos así podrás ejecutar el programa y seguirle para que veas como funciona. En lo que has mandado tapas con la elipse roja que has puesto y solo veo que es Sql Server pero no veo si 2014 , 2017 u otro y necesito saber la versión para poderte decir que me mandes bien una copia de seguridad ó un Scrip de la B.D.

Yo trabajo con visual Studio 2019 y con Sql Server 2017.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 23/05/2020 10:27:11
Hola Miguel,

“... si quieres te puedo mandar todo el proyecto
No gracias. Pienso que el programa funciona y veré nada otro. He dicho que el código podía ser escrito de mejora manera. Pero, cuando funciona, no cambiamos.

“... no veo si 2014, 2017
Este es sin importancia si creas “manualmente” mi DB sobre tu PC. Mi código funciona en todas versiones de SQL Server.
He creado mi DB con el explorador de servidores de VisualStudio 2010 (ver la video) y ayer, he utilizado VisualStudio 2013 para abrir y hacer las imágenes con textos en español.

Pero he retirado la DB del servidor SQL y he lo hecho un fichero separado que adjunto (LaDB.zip). Para ejecutar mi programa con este DB, tienes que añadir una conexión con el explorador de servidores de tu VisualStudio y crear un conexión SQL Server con fichero liado, o que añades mi DB en la gestión de tu Server SQL.

También adjunto los código SQL de creación de la DB y de las tablas (también en LaDB.zip).

Buen trabajo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 23/05/2020 11:31:43
Mira Phil voy adelantar más tiempo si me explicas que hace tu programa y me mandas 6 registro de datos de cada tabla en una lista y monto un programa y luego tu lo puedes examinar y veras si te parece bien como yo lo programo. Es entonces cuando si te gusta puedo explicarte la programación.

Y otra cosa tu base de datos corre en cualquier Sql Server estoy de acuerdo, pero para poder meterla yo en el Sql Server tengo que saber si la tengo que adjuntar ó ejecutar el Scrip, de lo contrario desconozco si hay otras formas.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 23/05/2020 12:04:07
Phil he visto que has mandado un MDF y la forma de recuperarlo es adjuntado el fichero pero da un error. Por lo tanto haz por favor lo que te he pedido voy a crear la B.D. pero quiero saber que condiciones cumple cada campo y las necesidades de tu proyecto.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 23/05/2020 12:26:31
Que es tu version VisualStudio ?
Aqui, tengo 2010 FR, 2013 ES, 2015 FR y 2017 FR. Si posible, utilizaré la misma que ti.
Intentaré hacer un vidéo de création del DB, si no demasiado grande ...

Miraré este en la tarde.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 23/05/2020 12:46:03
Te pase en una comunicación anterior que yo estoy desarrollando con visual Studio 2019 con todas las actualizaciones que manda Microsoft y en cuanto al Sql Server trabajo con el Sql Server 2017 y tengo un portátil para cuando llevo los trabajos al usuario para que ver si cubre sus necesidades y este tiene también el Visual Studio 2019 y Sql Server 2014 pues ya tiene 14 años es de 32 bits y solo direcciona 4 Gb lo cual no me permite instalar la versión 2017.

Yo puedo compartir durante unos días mi trabajo montar el tuyo pero para eso tengo que conocer como bien te he dicho las necesidades del mismo tanto de la tabla como de los datos que recoges en ella.

Quedo a la espera de lo que decidas.

Un saludo Phil
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 23/05/2020 18:07:37
Hola,

He hecho 4 videos para crear una DB y la utilizar con mi programa.

No tengo VisualStudio 2019. He utilizado VisualStudio 2017. Los textos de la interfaz son en francés.

Las vídeos están ordenadas de manera lógica como esta :

Creación de la DB : https://www.dropbox.com/s/eu8t4prq5sod6th/CrearDB.mp4?dl=0

Creación de las tablas : https://www.dropbox.com/s/gkj9ltdfifq09iz/CrearTablas.mp4?dl=0

Modificación del nombre de un campo de una tabla y creación de la cadena de conexión : https://www.dropbox.com/s/5mnegen0au2z8ko/CrearCadenaConexion.mp4?dl=0

Para testar, escritura de algunos registros en las tablas y ejecutar del programa : https://www.dropbox.com/s/06wdiylbjekyqej/CrearPrimerosRegistrosYEjecutar.mp4?dl=0

Espero que podrás probar mi programa. Atención, mi programa no es la solución à tu problema de indicio Null, este es solamente un ejemplo del utilización de IDENT_CURRENT.

En esta hora, que decir : Buenas tardes o buenas noches ?

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 23/05/2020 18:33:33
Buenas tardes Phil, aquí es la misma hora que la tuya si vives en Francia tienes que subir muy al Norte para que aun siendo la misma hora notes cambios de luz.

El Visual Studio es gratuito así que mejor es que te bajes la versión 2019 pues tiene muchas cosas de las que carecen las versiones anteriores e igualmente el Sql Server 2017, lo que de momento no te recomiendo es el 2019 pues las prestaciones que necesitamos nosotros están de sobra cubiertas con el Sql 2017.

Otra cosa estos videos es imposible ver nada bien, pues están muy borrosos así que te recomiendo que me pases la información de los datos de tu trabajo indicando las características de los registros así como la información de cuatro ó cinco líneas de datos de lo que introduces en ellas.

Monto un proyecto y te lo mando lo ves y analizas el contenido y luego ya me dirás que hacer.

Mi correo es "[email protected]" para si te quieres conectar conmigo por Skipe.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 23/05/2020 22:55:58
Vivo en Bélgica y tenemos la misma hora. Gracias para tu repuesta. Dices "Buenas tardes" a la 6 p.m.
En francés, hacemos diferencia entre "après-midi" (tras 12h, = tarde), "soirée" (tras el día de trabajo) y "nuit" (= noche) a partir del momento donde vamos dormir. Entonces, para mi, este es difícil de saber que decir a la 6 p.m.

"la versión 2019 pues tiene muchas cosas de las que carecen las versiones anteriores" Pienso que este es ilusión pues nunca utilizamos todas las posibilidades de cada version. Instalaré la version 2019 mas no sé si version FR o version ES. Reflexionaré ...

Acuerdo que las videos estan borrosos. Pero dices me si tienes la misma interfaz del explorador de servidor que en VS2019 ? En este caso, puedo te enviar fotos de los momentos importantes, con comentarios.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Miguel (281 intervenciones) el 24/05/2020 12:29:35
Bueno Phil Buenos días , buenas tardes y buenas noches ya se que de Pirineos para arriba el tema de los saludos y despedidas es un poco diferente de España. He estado por toda Europa, países Nórdicos y parte de los piases del Este y se que las costumbre son diferentes pero aquí también las tardes cuentan a partir de las 12:00 y la noche según zonas y época del año pueden oscilar entre las 21:00 ó 22:00 pero no es algo generalizado en España, espero no haberte molestado pues es verdad que no repare en vuestras costumbres.

Veo que has instalado el Visual 2019 y como puedes ver visualmente es lo mismo que el 2017 solo que trae más funciones y utilidades. Lo que también he visto es que entras al Sql Server a través del Visual Studio y quería decirte que es mejor y más fácil trabajar con el Sql Server instalado pues a través del Visual es un rollo y te pide información que no controlas o al menos yo una vez que lo intente lo deje por aburrimiento. Lo del Identity es correcto lo que me muestras y lo de los campos NULL me gustaría saber con que criterio lo pones pues si es porque pueda haber registros en los que ese campo no se cargue es correcto pero si utilsa el NULL ten en cuenta que no podrás poner el valor de "único".

Lo mejor es que me mandes tu correo para hacer una conexión a través del Skipe y si tienes instalado el TeamViewer para cualquier cosa en la que pueda ayudar vamos a ganar tiempo. (Yo utilizo el TeamVieWer 15)

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Generar el índice automáticamente con Identidad en Sql Server

Publicado por Phil Rob (1554 intervenciones) el 24/05/2020 19:25:45
Hola,

"...mandes tu correo..." Ya lo tenes pues has recibido las imágenes que he te enviadas este mañana. No ?

Voy de te enviar otro mensaje por correo.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar