none
SQL SERVER 2005 con VISUAL STUDIO 2005 RRS feed

  • Pregunta

  •  

    Wenas a to2 y gracias de antemano!

    Acabo de empezar a programar en visual studio 2005 utilizando bases de datos de SQL server 2005 y ando bastante

    perdido...tengo bastantes dudas...

     

    Bueno empiezo,

    1- La primera es que no se como cargar en un combobox 2 columnas de una misma tabla, es decir, que me cargue

    ID|NOMBRECLIENTE...

     

    y aparte, que al pinchar en una opcion del combobox se me abra un datagrid con los datos de otra tabla llamada OBRAS refiriendose a las obras que tiene ese cliente.

     

    2- La segunda es como hago para que al borrar una fila del datagrid se me borre tambien de la base de datos?

    la unica sentencia que tengo es ...

    Me.DataSet1.Tables(0).Rows.RemoveAt(Me.DataGridView1.CurrentRow.Index)

     

    y claro con eso solo hace lo primero...

     

    3 - La tercera es que nose como puedo insertar una fila en la base de datos SQL SERVER utilizando 1 combobox

    en una tabla que consta de 2 campos .. ID que es autonumerico y por lo tanto lo haria solo y NOMBRE que seria el combobox...

     

    Por ultimo, les queria decir que cuando hago un crystal report de una tabla de la base de datos no me coje los acentos de los campos ni el caracter "Ñ" de un campo, si sabéis una forma de solucionarlo sin cambiar los datos de la tabla os lo agredecería...

     

    Muchass graciass por la ayudaaa

     

    • Cambiado Enrique M. Montejo lunes, 2 de mayo de 2011 15:41 acceso a datos (De:Lenguaje VB.NET)
    martes, 1 de abril de 2008 10:00

Todas las respuestas

  • Hola,

     

    Sobre tu primera consulta, lo que haría yo sería en el Value del ComboBox poner un el ID del Item (o sea el ID del cliente) y como Item del ComboBox el NombreCliente. Esto sería lo "correcto". Si prefieres hacerlo de la otra forma es muy fácil, como Value le tienes que poner el ID del cliente o otro valor, recuerda que si no lo haces al evento click no vas a capturar el valor si no que simplemente tendras el texto del Item del ComboBox, luego haz tu consulta a la BD y todo lo que quieras poner en el Item para que lo vea tu cliente concatenalo dentro de un string:

     

    string correcto = tuvalorID + "|" + tuvalorCAMPO;

    this.comboBox1.Items.Add(correcto);

     

    Sobre tu segunda consulta, y viendo que trabajas con DataSet y DataTables existe el metodo AcceptChanges que lo que hace es modificar la BD en función de lo que has echo en el Grid. O sea, que si has añadido 30 registros, borrado 3 y modificado 8 en el evento que escojas haces el AcceptChanges y te lo va a modificar en la BD. Además los métodos insert,update y delete son casi automaticos.

     

    Aquí va más info:

     

    http://msdn2.microsoft.com/es-es/library/system.data.dataset.acceptchanges(VS.80).aspx
    http://msdn2.microsoft.com/es-es/library/ss7fbaez(VS.80).aspx

     

    Sobre tu tercera consulta, si necesitas hacer el INSERT INTO cuando seleccionan un valor del ComboBox, hazlo en el evento SelectedIndexChanged cojiendo el value o el texto del ComboBox ,si no, si tienes que hazerlo desde un botón lo haces en el evento Click y hazes lo mismo, leer el valor o el texto de tu ComboBox.

     

    Y sobre última consulta, poco puedo ayudarte, no utilizo CrystalReports para hacer reports, aunque creo que tu problema puede ser un tema de Encoding... no vaya a ser que no estes leyendo con el encoding correcto (ascii,utf-7...) o que tengas la BD configurada en un encondig incorrecto. Yo te recomiendo el UTF-8 y el ISO.

     

    Bueno, cualquier cosa, aquí estaré!

     

     

     

    miércoles, 2 de abril de 2008 9:05
  •  

    Hola #fjaumot# !!!

    Ante todo gracias por responder

     

    Respecto al problema del combobox concatenado, no he conseguido todavia insertar esas 2 columnas de la tabla de la base de datos en el combobox...

     

    string correcto = tuvalorID + "|" + tuvalorCAMPO;

    this.comboBox1.Items.Add(correcto);

     

    He hecho el string pero no entiendo a que te refieres poniendo tuvalorID y tuvalorCAMPO ... ya que aqui tendria que poner las columnas de la tabla clientes del dataset, lo siento ando bastante perdido...

     

    Tambien probe a hacerlo poniendo como me has dicho el valuemember al ID y el displaymember al nombre pero nada...

     

     

    Sobre la segunda consulta, todo solucionado! esa es la propiedad que estaba buscando, muchas gracias!!!

     

    Y sobre la tercera estoy con el combobox, yo quiero escribir algo dentro de el y mediante un boton de añadir me lo añada a la tabla la base de datos sql (unicamente el nombre del cliente, porque el otro campo ID autonumerico me lo meteria por defecto)

    podrias explicarme con un ejemplo mas concreto como lo haria?

     

    Respecto al crystal report sigo como antes buscando y buscando...

     

    y bueno por ultimo tambien stoy intentando que al elegir un elemento de un combobox(NOMBRECLIENTE de la tabla CLIENTES) se abra un datagrid con las OBRAS(otra tabla OBRAS  con todos sus datos que esta relacionada con clientes) que tienes ese cliente

    si me podrias poner un ejemplo de eso tambien te lo agradeceria muchisiimooo, me encuentro bastante atascado...

     

    weno un saludo y muchas gracias por tu paciencia!!!

    miércoles, 2 de abril de 2008 11:25
  • Holas, gracias a ti!

     

    Sobre el tema del comboBox. Cuando en la primera pregunta has dicho que querías ver el ID | NOMBRECLIENTE, estos datos seguramente los capturas desde la SQL... por ejemplo, haces la select y devuelves todas las filas en un DataTable. Lo mejor para hacer esto, es hacer la función que haga la select a la BD y devuelva un DataTable, luego lees este DataTable y lo vacias en instancias de una clase; algo como esto:

     

    La función que coje los datos del SQL: (DbaseUtils.cs) 3ª capa

     

    Code Snippet

    public DataTable obtenerClientes()

    {

    SqlConnection conexion;

    SqlCommand cmd;
    conexion = new SqlConnection("server=CENTRAL;user=tuUser;password=tuPSWD;database=tuBD");

    DataTable tabla = new DataTable();

    SqlDataReader lector;

    string consulta = "SELECT id,nombrecliente FROM clientes";

    cmd = new SqlCommand(consulta, this.conexion);

    cmd.CommandType = CommandType.Text;

    try

    {

    lector = cmd.ExecuteReader();

    tabla.Load(lector);

    }

    catch (Exception ex)

    {

    throw new Exception(ex.Message + ex.StackTrace);

    }

    return tabla;

    }

     

     

    La clase: (ManagerUtils.cs) 2ª capa

     

    Code Snippet

    public class clientes

    {

    private int _id;

    private string _nombre;

     

    #region propiedades

    public int id

    {

    get { return this._id; }

    set { this._id = value; }

    }

    public string nombreCliente

    {

    get { return this._nombre; }

    set { this._nombre = value; }

    }

    #endregion

     

    public codigos()

    {

    }

    }

     

     

     

    Y la propiedad que recoje todo en la 2ª capa (ManagerUtils.cs)

     

     

    Code Snippet

    public List<codigos> obtenerTodosLosClientes()

    {

    DataTable dtresponse = new DataTable();

    DbaseUtils _obj = new DbaseUtils();

    List<clientes> resp = new List<clientes>();

    try

    {

    dtresponse = _obj.obtenerClientes();

     

    for (int i = 0; i < dtresponse.Rows.Count; i++)

    {

    codigos _objc = new codigos();

    _objc.id = Convert.ToInt32(dtresponse.Rows[i]["id"]);

    _objc.nombreCliente = Convert.ToString(dtresponse.Rows[i]["nombrecliente"]);

    resp.Add(_objc);

    }

    }

    catch (Exception ex)

    {

    throw new Exception(ex.Message);

    }

    return resp;

    }

     

    Y ahora en la parte grafica: (formulario)

     

    Code Snippet

    List<ManagerUtils.codigos> listarespuesta = new List<ManagerUtils.codigos>();

    ManagerUtils _objManejador = new ManagerUtils();

    listarespuesta = _objManejador.obtenerTodosLosClientes();

    foreach (ManagerUtils.codigos miCliente in listarespuesta)

    {

    string tufrase = miCliente.id + "|" + miCliente.nombreCliente;

    this.comboBox1.Items.Add(tufrase);

    }

     

    Y ya tienes tu frase con el formato que lo querías. Esto sería una forma de hacerlo, la otra sería pasando de crear una clase y la función que devuelve el DataTable asignarla al DataSource del combobox1 y hacer el valuemember  y el displaymember , con id y nombrecliente respectivamente. Algo como esto:

     

    Code Snippet

    DbaseUtils _objBase = new DbaseUtils();

    this.comboBox1.DisplayMember = "id";

    this.comboBox1.ValueMember = "nombrecliente";

    this.comboBox1.DataSource = _objBase.obtenerClientes();

     

    Donde las propiedades del DisplayMember y ValueMember , sus literales, deben ser los mismos que las columnas de tu tabla SQL. O se que si tu tabla SQL no es id, es id_cliente y namecustomer deben ser esos. Lo mismo para la función obtenerTodosLosClientes cuando lees el DataTable.

     

    Sobre tu tercer duda, si quieres insertar datos que tiene que teclear el usuario... porque quieres hacerlo en un comboBox? Utiliza un TextBox y recoje el valor this.TextBox1.Text y pasalo a tu transact INSERT INTO y listo.

     

    Cualquier duda, aquí estoy!

     

    PD: si servi de ayuda marcame Stick out tongue

    miércoles, 2 de abril de 2008 14:38
  •  

    Respecto al Combobox nose que propiedad es la de DbaseUtils porque a mi no me aparece para declarar el _objBase...

    DbaseUtils _objBase = new DbaseUtils();

     

    Y sobre el combobox que me has dicho, quiero que aparte de que me saque un dato de una tabla dandole a un boton de abrir(que ya esta hecho) cuando el combobox se encuentre vacio(sin dar al boton de abrir) me permita insertar un dato en el que lo grave en la base de datos sql...

    es decir, introducir texto y dar a boton de nuevo y que se gravee...

     

    nose si viste otra duda que pusee arribaa de abrir un datagrid eligiendo un elemento del combobox...

    lo que hecho ha sido esto...

     

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

     

    Dim sql As String = ("Select O.IdOBRA, O.IDCliente, O.REFERENCIA, O.INSTALACIÓN, O.AÑO, O.MATERIAL, O.ANCHOBANDA, O.ESPESORBANDA, O.PESOBOBINAENTRADA, O.PESOBOBINASALIDA, O.VELOCIDADLINEA, O.DIABOBIENTRADA, O.DIABOBISALIDA, O.IdCODIGOINSTALACION from OBRAS O,CLIENTES C where O.IdCliente=" & Me.ComboBox1.SelectedItem(0) & "and O.IdCliente = C.IdOBRA")

    Dim adap1 As SqlDataAdapter

    adap1 = New SqlDataAdapter(sql, "Server=SQL;Database=ArchivoPlanos;Integrated Security=SSPI")

    Try

    Me.DataGridView1.DataSource = Me.Planos1.Tables("OBRAS")

    adap1.Fill(Me.Planos1, "OBRAS")

    Catch ex As Exception

    MsgBox(ex.Message)

    End Try

    End Sub

     

    el caso es que deberia funcionar...pero cuando lo ejecuto me da este tipo de error...

     

    SINTAXIS INCORRECTA DE ','-

     

    y despues cada vez que pincho en algún elemento del combobox...me da el mismo error pero con alguna palabra que aparezca de la selección...

    los campos de esta tabla los forman nombres con varias palabras y en algun caso nombres con acentos, Ü y comas y puntos...puede que algo de eso lo que me hace que me aparezcan los errores...

     

    weno  muchas gracias, me estas ayudando mucho

    un saludo

     

    jueves, 3 de abril de 2008 8:02
  • Holas,

     

    DbaseUtils es una clase que debes create tú. Llama al archivo DbaseUtils.cs y dentro creas los métodos que te indique. Lo mismo con la clase manejadora.

     

    Como veo que trabajas con aplicación windows. Cuando le des al botón que lee el combobox, como va a estar vacio, haces saltar un Input MessageBox pidiendo el texto que necesites. Es que con el combobox no vas a poder hazerlo con una solución simple ya que no tiene ninguna propiedad .Text para ver lo que tiene escrito en ese momento, si no que es una colección visual de Text/Value... y si no esta añadido...mal lo veo...

     

    Para el Input MessageBox puedes utilizar la libreria Microst.VisualBasic.Interaction.InputBox("Introduce tu texto:","titulo","texto xr defecto");

     

    Lo del grid es facil, en el evento index changed del combobox, estableces tu grid a visible = true (previamente lo has dejado a false) y le cargas una select con el item seleccionado en el combobox y listo

     

    Cualquier cosa más,..... Wink

    jueves, 3 de abril de 2008 11:17
  • Vale voy a probar a ver, muchas gracias

    de todas maneras ...

     

    public string nombreCliente

    {

    get { return this._nombre; }

    set { this._nombre = value; }

    }

    el get y el set no me funciona, me da un tipo de error...(me dice que no se admiten get y set)

    y aparte cuando hago la region me dice que se esperaba una constante de cadena...

    y en la de obtener clientes tambien ando con fallos con eso de la lista y eso que nose lo que tengo que poner...

    si podrias ser mas especifico...me da errores el for y todo...

    lo siento pero de clases no tengo ni idea...

     

    Respecto a lo del datagrid, lee el codigo de arriba que he puesto en el mensaje anterior y a ver si me puedes echar una mano

     

    un saludo

    jueves, 3 de abril de 2008 12:52
  •  

    Hola,

     

    TENEMOS UN PROBLEMA MUY GRANDE! jejeje que tu programas en VB .NET y yo en C# .NET así que.... tengo que traducirte TODO a VB Big Smile suerte que tengo aquí un traductor automatico: http://converter.telerik.com/

     

    no debería fallarte si copias y pegas este codigo dentro de tu nuevo archivo de clases clientes.vb.... (y dentro del namespace)

     

    PERO ESO SI... en VB.net no en C#.net

     

    Haz el cambio con el enlace que te pase y luego me dices si te funciona... Es que creía que sabías ambos, lo siento, un despiste.

     

    La select que me has pegado funciona bien cuando se concatena y la lanzas sobre SQL??? Prueva antes en sql please, i si te funciona y en vb no, copiame aquí la select completa con los valores, o sea tal y como la tienes en la variable sql después de que el codigo ejecute esa declaración de string.

     

    Si tienes dudas dime cosas,

    jueves, 3 de abril de 2008 21:02
  • Vale vale esto ya va cambiando

    ya decia yo que este codigo no me sonaba de nada jaja

    Bueno todavia tengo algun fallo por ahi...

    cuando declaro el public sub codigos en la clase de managerutils.css bien, pero cuando creo la funcion de obtenertodoslosclientes() como lista de codigos...

    Public Function obtenerTodosLosClientes() As List(Of codigos)

     

    me da error y bueno luego donde aparezca la palabra codigos al decirme que managerutils.codigo no esta definido me da error.

     

    Con respecto a la sql tengo un problema porque no tengo sql aqui instalado y por el visual con el dataset ando perdido la verdad...(unicamente tengo acceso al server, sin el studio manager ni nada)

     

    weno muchas gracias y un saludo (tranquilo que esto se va solucionando )

    viernes, 4 de abril de 2008 7:33
  • Holas!

     

    jejeje.... si un despiste Wink

     

    Bien en principio debería ir bien, el codigo en VB es:

     

    Code Snippet

    Public Function obtenerTodosLosClientes() As List(Of codigos)

    Dim dtresponse As New DataTable()

    Dim _obj As New DbaseUtils()

    Dim resp As New List(Of clientes)()

    Try

    dtresponse = _obj.obtenerClientes()

    Dim i As Integer = 0

    While i < dtresponse.Rows.Count

    Dim _objc As New codigos()

    _objc.id = Convert.ToInt32(dtresponse.Rows(i)("id"))

    _objc.nombreCliente = Convert.ToString(dtresponse.Rows(i)("nombrecliente"))

    resp.Add(_objc)

    System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)

    End While

    Catch ex As Exception

    Throw New Exception(ex.Message)

    End Try

    Return resp

    End Function

     

     

    Que error te da?? Has creado la clase managerutils?? mmmm, pero si trabajas sobre sql server o lo tienes en tu pc o lo tienes en un servidro... si es un servidor y tienes acceso, bajate sql express edition y trabaja con las tablas del servidor desde la version express.

     

    Si hay algo más, dime

     

     

    viernes, 4 de abril de 2008 7:43
  • Si la clase managerutils.css esta creada pero no me deja acceder a codigos...

    Me dice que el tipo codigos no esta definido, cuando hago eso...

    Y respecto a la region tambien me da el error de antes de (SE ESPERABA UNA CONSTANTE DE CADENA)

     

    //Lo de la region solucionado ... (me faltaban las comillas)

    #Region "nombre"

    #End Region

     

     

    el caso es que estoy en el trabajo y no puedo descargar nada y de momento tengo que trabajar de esta manera...

    pero tranquilo muchas gracias me lo descargare en casa!

     

    y otra cosa respecto a esto :

     

    listarespuesta = _objManejador.obtenerTodosLosCodigosClientesBeroni();

     

    No deberia ser (obtenertodoslosclientes en vez de eso que pones) ?

    muchas gracias

     

    un saludo

    viernes, 4 de abril de 2008 7:51
  • Holas,

     

    Las clases en VB son extensión .vb , en c# .cs y las hojas de estilo .css. He visto que me has puesto .css mira que esto no sea así.

     

    Exacto, en VB los regions siempre van con comillas, en C# no.

     

    Si, tienes razón. Es obtenertodoslosclientes

     

    Ya me dices,

    lunes, 7 de abril de 2008 11:11
  • Si perdona te puse mal la clase, pero si esta creado como managerutils.vb

    sigo con el mismo error de codigos que me dice que no esta definidoo

     

    saludos

    lunes, 7 de abril de 2008 11:27