Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: cobein en Junio 10, 2011, 08:09:30 pm
-
Holas, sigo con mi incursion en el tema de las bases de datos y tengo una pregunta, haciendo cosas relativamente simples los metodos normales de sacar, cargar, editar datos funcionan bien, ahora estoy teniendo problemas cuando quiero hacer cosas mas complicadas y me imagino que es simplemente mi ignorancia en el tema y que debe haver maneras mas eficientes y profesionales de hacer las cosas. Por ejemplo, una cosa muy tediosa es hacer los queries al tener que muchas columnas, el string se transforma en un poema (por lo largo) y hay que conacatenar, escapear y poner quotes a lo perro, me imagino que hay maneras mas simples de hacer esto, se de la existencia de los stored procedures pero no estan diponibles en todos los motores.. bueno dejo eso como mi primer consulta porque tengo mucho mas.
-
Si seguis usando access, no hay literalmente Stored Procedures (Procedimientos almacenados), pero si hay consultas parametrizables :D, es decir, podes llamar a una sola consulta SQL desde access con parametros.
"SELECT ID, Nombre, Apellido FROM tblPersonas WHERE Nombre LIKE @nombre"
Asi lo guardas en una consulta en access
Luego
Dim objCmd As ADODB.Command
Set objCmd = New ADODB.Command
Set objCmd.ActiveConnection = objConn ' Nuestra conexion
objCmd.CommandText = "selectPersonas" ' Nombre de la consulta
objCmd.CommandType = adCmdStoredProc ' CRUCIAL! para que funcione :P
Dim objParam
Set objParam = objCmd.CreateParameter("@nombres" , adVarchar, adParamInput, 0, 0)
objCmd.Parameters.Append objParam
objCmd.Parameters("@nombres") = "pepito"
objRS.Open objCmd
' Y aca lo recorremos, para mostrar los resultados
No lo probe, lo hice al vuelo (igual lo saque de aca (http://support.microsoft.com/kb/200190/es))
Al menos yo lo uso mucho para evitar tenes consultas en pleno codigo :P
-
Por lo que vi, voy a necesitar stored procedures y bases de datos relacionales (dos cosas de las que no tengo idea) por lo menos para no hacer un desastre en el codigo (puedo usar sqlserver). Pero sigo con muchas dudas.. voy a poner un ejemplo concreto de cosas con las que me tope.
Vamos a suponer que mi objetivo es hacer un costeador de recetas (no es el caso pero se ajusta bastante al lo que necesito... y tengo hambre!!!)
Como base tendria una tabla:
ingredientes (codigo/descripcion/precio)
Luego la de las recetas que agruparia ingredientes:
receta (receta_id/codigo del ingrediente/ cantidad)
Y para terminar el costeo
recetario (receta_id/descripcion)
esto me genera una dependecia entre datos (este es mi problema) que cuando por ejemplo modifico ingredientes, ya sea cambiar el precio, eliminar o modificar las cantidades en una receta las tendria que reflejar de manera dinamica en la interfaz que como decia antes ya se me lleno de porqueria por los queries y cargar los datos en las tablas.. la verdad me tiene mal esto, imagino que hay maneras de hacer todo esto sin tanto lio.
Estoy trabajando con vb.net 2010.
-
yo nunca tuve problemas, y eso que he visto consultas que son eternas, hay algunos que lo hacen en una sola linea, y eso esta mas que mal, ya que es practicamente "inseguible" la consulta. mis consejos son los siguientes:
1 - para hacer una consulta, si vas a usar el metodo de "concatenacion", te recomiendo usar en .NET el stringbuilder, ya que como debes saber, es infinitamente superior en velocidad al string comun (cuando se usa en bucle), por ejemplo si tenes que recorrer algun objeto con un bucle y al mismo tempo ir insertando datos y creas ese string en cada iteracion, con el string comun tardas muchisimo mas.
2 - en visual basic 6 como no existe stringbuilder, y la verdad no he encontrado forma de optimizarlo, o sea las consultas las hago con la famosa concatenacion, pero para que sea bien entendible tenes que ordenar la consulta, si la ordenas no creo que tengas problemas de entenderla, aca te paso un ejemplo de una consulta ordenada:
Dim vSQL As String
vSQL = " SELECT loc.idlocalidad,loc.nombre AS nombrelocalidad,pro.idproducto,pro.nombre AS nombreproducto,"
vSQL = vSQL & " COUNT(DISTINCT(cd.idpdv)) AS visitados,"
vSQL = vSQL & " COUNT(DISTINCT(CASE WHEN cd.entrega>0 THEN cd.idpdv END)) AS Alcance"
vSQL = vSQL & " FROM censosdetalle cd"
vSQL = vSQL & " INNER JOIN pdv p ON cd.idpdv=p.idpdv"
vSQL = vSQL & " INNER JOIN localidades loc ON p.idlocalidad=loc.idlocalidad"
vSQL = vSQL & " INNER JOIN productos pro ON cd.idproducto=pro.idproducto"
vSQL = vSQL & " WHERE 1=1"
vSQL = vSQL & " AND cd.idproducto IN (" & vIdProElegidos & ")"
vSQL = vSQL & " AND loc.idlocalidad IN (" & vIdLocElegidas & ")"
vSQL = vSQL & " GROUP BY loc.idlocalidad,loc.nombre,pro.idproducto,pro.nombre"
vSQL = vSQL & " ORDER BY loc.idlocalidad,pro.idproducto"
no es una consulta grande, hay consultas 10 veces mas grandes, pero como ves es mucho mejor que hacerla en una sola linea como hacen algunos.
en .NET eso lo haces igual, pero con un objeto stringbuilder y el .Append, por las dudas para reiniciar el stringbuilder en el comienzo de cada iteracion tenes que poner el .Lenght = 0
saludos.
-
Si, vi cosas asi.. y me dan vertigo, pense que era yo haciendo locuras pero aparentemente es la manera de resolverlo. Siguiendo con lo anterior, cuando tenes cosas asi tipo "cascada" donde tenes que resolver por ejemplo calculos que dependen de datos que a su vez dependen de calculos, hay que seguir la "cascada" y resolver todo a mano o hay maneras de enlazar eso? y con lo de la interfaz como se manejan? Se buscar y no soy tarado pero esto de las bases de datos me puede, veo procedimientos repetitivos e ineficientes por todos lados y me da la sensacion de que se puede hacer de otra manera.
-
no te entendi bien :P, si me das un ejemplo....
otra cosa es, que si vas a programar en bases de datos, aunque sea un pedorro ABM, esta bueno siempre hacerlo en 3 capas, te queda todo ordenado, y en la capa de la interfaz (formularios) casi no te queda codigo, esta todo dentro de las clases.
-
Con respecto a la interfaz lo que decia es que por ejemplo tengo un proyecto MDI con digamos tres formularios abiertos y ahi viene el ejemplo anterior
Vamos a suponer que mi objetivo es hacer un costeador de recetas (no es el caso pero se ajusta bastante al lo que necesito... y tengo hambre!!!)
Como base tendria una tabla:
ingredientes (codigo/descripcion/precio)
Luego la de las recetas que agruparia ingredientes:
receta (receta_id/codigo del ingrediente/ cantidad)
Y para terminar el costeo
recetario (receta_id/descripcion)
esto me genera una dependecia entre datos (este es mi problema) que cuando por ejemplo modifico ingredientes, ya sea cambiar el precio, eliminar o modificar las cantidades en una receta las tendria que reflejar de manera dinamica en la interfaz
cual seria la manera de "refrezcar" todas la ventanas cuando todo esta enlazado. se que se pueden tener eventos y coasas asi pero no tengo bien claro eso. Quiero aprender a hacer esto correctamente, no me interesa meter codigo por todos lados (que podria..), pero quiero que sea lo mas modular y mantenible posible porque es provable que tenga que escalar el proyecto eventualmente.
-
Hola Cobein.
Mi estimado, pienso que estas queriendo empezar por los pies, el código sql es casi lo ultimo que debes ver, tu confusión radica en que no has hecho el diseño y por tanto (creo yo) viene tu confusión.
Lo que si es cierto (como dijo sebas) hay consultas muy muy complejas y no queda de otra que hacerla, si has hecho un diseño y mantenido un cierto orden veras que por mas grande y "compleja" que se vea la consulta en realidad no lo es. Para mi la verdadera joda es cuando tengo que leer los scripts SQLs de otros, allí si es un dolor de cabeza, pero cuando esta bien creado incluso tapando la pantalla con la mano de cierta parte del código logras entenderlo todo.
Recomendación: Usa Nombres cortos para las tablas y los campos. Veamos tu ejemplo (lo sigo en el siguiente post para q no se me meta otro usuario ya que esta fluido este hilo)
-
Otra cosa, para empezar te puede venir muy pero muy bien usar el DataEnvironment del VB6, porque alli practicamente "dibujas" la consulta sql, osea, solo enlazas tablas y el codigo se va escribiendo, luego lo retocas- Esto no importando el motor que tengas, algunos te joderan un pelin pero es superable.
Continuo
-
Realizar un Costeador de Recetas.:
Tabla Maestro: tIngred (Tabla de Ingredientes)
Campos:
tIngred_Id
tIngred_Desc
tIngred_Precio
Tabla Maestro tReceta (Tabla de Recetas)
tReceta_Id
tReceta_tIngred_Id
tReceta_Cant
Dime si hasta alli vamos bien o quiza mi nomenclatura marea... te juro que al final la lectura se hace tan sencilla como leer la cenicienta.
Hasta aqui no hace falta mas, ya que por consulta sale el valor de cada Receta... tu diras, sigo?
-
cual seria la manera de "refrezcar" todas la ventanas cuando todo esta enlazado. se que se pueden tener eventos y coasas asi pero no tengo bien claro eso. Quiero aprender a hacer esto correctamente, no me interesa meter codigo por todos lados (que podria..), pero quiero que sea lo mas modular y mantenible posible porque es provable que tenga que escalar el proyecto eventualmente.
buena pregunta 8), nunca he realizado algo asi, digo de actualizar varias ventanas automaticamente ante un cambio, en realidad nunca he trabajado con mas de una ventana abierta al mismo tiempo, pienso en triggers que detecten el cambio, pero ni idea como es, estaria bueno saberlo.
-
cual seria la manera de "refrezcar" todas la ventanas cuando todo esta enlazado. se que se pueden tener eventos y coasas asi pero no tengo bien claro eso. Quiero aprender a hacer esto correctamente, no me interesa meter codigo por todos lados (que podria..), pero quiero que sea lo mas modular y mantenible posible porque es provable que tenga que escalar el proyecto eventualmente.
buena pregunta 8), nunca he realizado algo asi, digo de actualizar varias ventanas automaticamente ante un cambio, en realidad nunca he trabajado con mas de una ventana abierta al mismo tiempo, pienso en triggers que detecten el cambio, pero ni idea como es, estaria bueno saberlo.
Pero si habla de ventanas y quiero refrescos en tiempo real de esas ventanas (o sea formularios) solo tiene dos formas. Usar controles que se actualizas automaticamente... por ejemplo el DBGrid me parece que hace eso. O poner un timer que actualice las consultas.
-
Verdad que vos usabas .net (y yo que sigo en vb6 xD)
Lo que te preocupa, lo han mejorado mucho a tal punto de que "lo resolvieron", son lo que serian "DataSets tipados" esto es, una vez hecha bien la base de datos, con un asistente te genera todo el entorno para que simplemente enlazes los controles a cada campo y wualá!
En cambio si queres por donde comenzamos todos, seria usar la POO y usar la programacion en capas
Interfaz (Llaman a las clases, nunca tocan nada de la BD directamente)
Capa de negocios (Clases, aca hay una clase por cada tabla con sus respectivas propiedades y relaciones)
Capa de acceso a datos ( por lo general o para principiantes creo yo, esta muy unida a la capa de negocios. Es donde llamas a la BD y rellenas los datos de las clases)
Siempre ante cada cambio de datos, estas obligado a cambiar la interfaz, ya sea a mano (cambiando un solo dato en una fila de un Grid) o refrescando los datos enteros (si haces eso, puede que se pierda la logica de programar en capas) :P
Hay muchos aspectos sobre los cuales trabajar...
-
cual seria la manera de "refrezcar" todas la ventanas cuando todo esta enlazado. se que se pueden tener eventos y coasas asi pero no tengo bien claro eso. Quiero aprender a hacer esto correctamente, no me interesa meter codigo por todos lados (que podria..), pero quiero que sea lo mas modular y mantenible posible porque es provable que tenga que escalar el proyecto eventualmente.
buena pregunta 8), nunca he realizado algo asi, digo de actualizar varias ventanas automaticamente ante un cambio, en realidad nunca he trabajado con mas de una ventana abierta al mismo tiempo, pienso en triggers que detecten el cambio, pero ni idea como es, estaria bueno saberlo.
Es que en realidad es inocomodo trabajar asi, mas facil de uno por vez, pero hay veces que no alcanza (no se si este sea el caso)
Eso si, SIEMPRE, ante cada cambio de formulario, actualizar los datos (como si fuera en la web, Ves el indice, quieres agregar, agregues o canceles, cuando vuelves al indice los datos se actualizan igual)
-
creo que lo esta haciendo en .NET, a proposito del Timer, he visto en internet un ejemplo que actualiza automaticamente un datagridview cada determinado tiempo, pero sin usar el evento Tick() sino que usa un delegado, igualmente debe consumir recursos.
-
Yo solamente usa la consultas con un timer cuando solo hago un Dashboard, ninguna transacción, solo consultas e incluso con grafica de barra y toda la madre, alli si es bacan, pero cuando metes transacción la cosa alli se pone un poco problematica...
Ahora, no se para que seria necesario que el proyecto de Cobein lleve ese tema, como dijo raul, al entrar y salir del form actualiza la consulta, es mas, cuando grabas mandas a actualizar la consulta y ya.
-
Volvi, me morfe unas milangas =D ahi me pongo al tanto.
Edito: Perdon por la demora, si no estoy mal, me parece que en net se pueden utilizar eventos para saber de cambios en la tabla pero estoy muuuy frezco en esto.
Sigo editando: aca esta lo de los eventos
http://www.java2s.com/Code/VB/Data-Structure/DatabaseConnectionstatechangeevent.htm
Pero parece que es solo para la coneccion
-
Volvi, me morfe unas milangas =D ahi me pongo al tanto.
Edito: Perdon por la demora, si no estoy mal, me parece que en net se pueden utilizar eventos para saber de cambios en la tabla pero estoy muuuy frezco en esto.
No se como es en .Net pero supongo que habrán un par de controles que consulten a la BD cada segundo. Los triggers hacen actualizaciones o se disparan automaticamente cuando una tabla cambia, pero esto es solo en la BD, en el motor, pero porque te enrolas en ese tema en la etapa inicial?, salvo que tengas claro porque quieres ese tema absuelto, no hay necesidad aun de ver eso. Seria interesante que indiques porque quieres resolver eso y te damos un par de soluciones.
-
Noo! Te va a costar mucho mas ver si una tabla se modifico, que simplemente refrescar los datos.
Seba, es lo mismo usar el control timer, que la clase System.Timer con delegados, no hay drama de recursos.
Por cierto cobein, si usas .net? Que version? Podrias meterte de lleno a Entity Framework y/o Linq que te pueden facilitar muchas cosas
-
Sigo editando: aca esta lo de los eventos
http://www.java2s.com/Code/VB/Data-Structure/DatabaseConnectionstatechangeevent.htm
Pero parece que es solo para la coneccion
si, es un evento de la conexion...no es de actualizacion de registros.
-
Bien, les comento un poco del proyecto, lo tengo encaminado y ya hice unas cuantas tablas y formularios pero llegado cierto punto empece a replantearme todo, viendo las consultas mostruosas, la cantidad de eventos que tengo que manejar (des/habilitar controles el la interfaz) mas los cambios en las tablas que a su vez generan cambios en otros formularios etc. Mi carma me dijo que estaba haciendo cagadas por eso estoy aca preguntando.
-
otra cosa, esto no estan complicado, lo que planteas se puede hacer tranquilamente en una sola pantalla, como de administracion.
por ejemplo, en una grilla grande tenes todos los ingredientes con su precio, despues de cambiarle el precio a un ingrediente, podes volver a cargar los datos en la pantalla de recetas y que se vean reflejados, pero solo si el tipo cambio algo, eso se puede hacer facil, y no hay que pensar en eventos ni nada. todo en la misma pantalla, porque imaginate seria engorroso, despues de cambiar el precio , cerrar la pantalla y abrir la de recetas y ahi ver el cambio, esto se puede hacer tranquilamnete en una pantalla.
-
Bien, les comento un poco del proyecto, lo tengo encaminado y ya hice unas cuantas tablas y formularios pero llegado cierto punto empece a replantearme todo, viendo las consultas mostruosas, la cantidad de eventos que tengo que manejar (des/habilitar controles el la interfaz) mas los cambios en las tablas que a su vez generan cambios en otros formularios etc. Mi carma me dijo que estaba haciendo cagadas por eso estoy aca preguntando.
Asi es papa, cuando ya metes tema a base de datos tienes que empezar a hacer el diseño de la base de datos y de la parte funcional mucho antes de hacerte las tablas y menos los formularios, por mas pequeño que sea, tiene que ser asi.
Bueno, estaba haciendo el proyecto en paralelo para ejemplificar pero veo que el tema va por .net asi que creo que te confundiría mas ya q lo estaba viendo con access y VB6 que es lo que esta mas a la mano. Igual te paso lo que avance por si algo sirve.
http://www.4shared.com/file/TmEqvoeC/EjemploReceta.html? (http://www.4shared.com/file/TmEqvoeC/EjemploReceta.html?)
Suerte en el proyecto.
-
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
Si, eso lo se y fue uno de mis pensamientos, pero sabiendo lo que va a pasar (inflar costos y verlo reflejado en el costeo), queria que todo sea interactivo, poder ver los cambios infimos en los costos de materia prima reflejados en el costeo final sin tener que cambiar de ventana continuamentente entre otras cosas.
Perdon voy a dar vuelta la torta, asi lo hago mas facil, si ustedes tienen que encarar un proyecto complejo que posiblemente requiera escalarlo y necesite mantenimiento, con muchas tablas y datos que van a estar en pantalla y que estan interrelacionados, como lo harian?
Dejame que lo veo YvanB, algo entiendo de vb, lo que me interesa mas que nada es la logica de trabajo y eso por ahora.
-
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
Si, eso lo se y fue uno de mis pensamientos, pero sabiendo lo que va a pasar (inflar costos y verlo reflejado en el costeo), queria que todo sea interactivo, poder ver los cambios infimos en los costos de materia prima reflejados en el costeo final sin tener que cambiar de ventana continuamentente entre otras cosas.
Perdon voy a dar vuelta la torta, asi lo hago mas facil, si ustedes tienen que encarar un proyecto complejo que posiblemente requiera escalarlo y necesite mantenimiento, con muchas tablas y datos que van a estar en pantalla y que estan interrelacionados, como lo harian?
Doc, pero si hablas de "costeo de materias primas" de verdad, o sea no solo sumar cantidades y multiplicar por precios para tener el nuevo valor de la receta entonces debes indicar el método de costeo que piensas utilizar.
Si la cosa es sencilla como multiplicar cantidades y sumar los subtotales eso se resuelve con una sola consulta.
-
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
Si, eso lo se y fue uno de mis pensamientos, pero sabiendo lo que va a pasar (inflar costos y verlo reflejado en el costeo), queria que todo sea interactivo, poder ver los cambios infimos en los costos de materia prima reflejados en el costeo final sin tener que cambiar de ventana continuamentente entre otras cosas.
Perdon voy a dar vuelta la torta, asi lo hago mas facil, si ustedes tienen que encarar un proyecto complejo que posiblemente requiera escalarlo y necesite mantenimiento, con muchas tablas y datos que van a estar en pantalla y que estan interrelacionados, como lo harian?
es que no se de que estamos hablando, o sea cuantas tablas son que tan grande es el sistema ?, te digo que hasta los sistemas mas grandes que existe de gestion, pocas veces tienen eso que queres, de que actualizan los datos automaticos, casi todos tienen grandes pantallas, pero al fin y al cabo solo una abierta por vez, pero que a su vez llaman a otras y despues de hacer un cambio actualiza la que llamo a esta ventana, no entiendo cuando decis relacionados, obvio que los datos de las tablas estan relacionados, eso es siempre asi, pero no hay porque actualizarlo todo de golpe en pantalla.
-
Bien, les comento un poco del proyecto, lo tengo encaminado y ya hice unas cuantas tablas y formularios pero llegado cierto punto empece a replantearme todo, viendo las consultas mostruosas, la cantidad de eventos que tengo que manejar (des/habilitar controles el la interfaz) mas los cambios en las tablas que a su vez generan cambios en otros formularios etc. Mi carma me dijo que estaba haciendo cagadas por eso estoy aca preguntando.
Bienvenido al mundo de los ABM :P
No te preocupes, es asi, por mas horroroso que suene, todos los metodos hacen lo mismo, de una forma u otra.
Datasets tipados, todo junto o programacion en capaz. Internamente es todo igual :P
Fijate con cual te llevas mejor
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
Ya hice 2 proyectos asi (ambos en vb6) y la verdad: 1 formulario activo por vez y una grilla atras mostrando datos actuales (pacientes con turnos del dia).
Ante cada cambio de formulario, refrescar los datos. Procedimientos almacenados a full, era una sola terminal, pero lo prepare en caso de escalabilidad, en red, usar broadcasting cada cambio de informacion para que actualizen de forma transparente. Y fuerte valiacion de datos :P
Es mas, me esforce por hacer una linda gui al estilowindows xp/7
Y fue por esos proyectos que empeze a modificar para buscar mejoras al ucListView xD
-
Bien, vie el ejemplo YvanB, y por lo que me dicen ambos me parece que comprendo la mecanica que usan pero eso era lo que queria evitar, por ejemplo, en el ejemplo que me dejaron, se maneja modalmente y se "espera" por un cambio, mi idea era que fuera mas dinamico, permitiendo por ejemplo hacer cambios como por ejemplo agregar un ingrediente en una ventana y que se vea reflejado en la otra sin tener que bloquearla, poder hacer hacer varias cosas a la vez sin tener que estar bloqueado en un paso, y teniendo en cuenta los cambien es un lado afectan direstamente a las otras tablas y las otras interfaces..
-
Bien, vie el ejemplo YvanB, y por lo que me dicen ambos me parece que comprendo la mecanica que usan pero eso era lo que queria evitar, por ejemplo, en el ejemplo que me dejaron, se maneja modalmente y se "espera" por un cambio, mi idea era que fuera mas dinamico, permitiendo por ejemplo hacer cambios como por ejemplo agregar un ingrediente en una ventana y que se vea reflejado en la otra sin tener que bloquearla, poder hacer hacer varias cosas a la vez sin tener que estar bloqueado en un paso, y teniendo en cuenta los cambien es un lado afectan direstamente a las otras tablas y las otras interfaces..
si te entiendo, eso es un quilombo digamos, de que se puede hacer, se puede hacer, pero es un trabajo de burros que ni quiero pensar.
-
El motor (BD) esta en una capa y la aplicación en otra, necesariamente tienes que llamar desde la aplicación lo que quieres saber, no es al reves, no es el motor el que le dice a la aplicación que dato va o quiere actualizar.
Sea que uses un super control que haga la chamba de actualizarse solo o sea que lo programes usando un timer u otra cosa igual tienes que soplarte la consulta desde la aplicación hacia la base de datos. No queda de otra.
-
Bien, vie el ejemplo YvanB, y por lo que me dicen ambos me parece que comprendo la mecanica que usan pero eso era lo que queria evitar, por ejemplo, en el ejemplo que me dejaron, se maneja modalmente y se "espera" por un cambio, mi idea era que fuera mas dinamico, permitiendo por ejemplo hacer cambios como por ejemplo agregar un ingrediente en una ventana y que se vea reflejado en la otra sin tener que bloquearla, poder hacer hacer varias cosas a la vez sin tener que estar bloqueado en un paso, y teniendo en cuenta los cambien es un lado afectan direstamente a las otras tablas y las otras interfaces..
Inventa tu propio sistema de "broadcasting" entre formularios :P se puede hacer, pero depende del escenario en el que estan los controles, y olvidate de la programacion en capas y dataset tipados :P
O sea, viaja doble informacion, se guarda en la base de datos, y la misma "fila nueva" la agregas/cambias en tu lista :)
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
-
Bien, vie el ejemplo YvanB, y por lo que me dicen ambos me parece que comprendo la mecanica que usan pero eso era lo que queria evitar, por ejemplo, en el ejemplo que me dejaron, se maneja modalmente y se "espera" por un cambio, mi idea era que fuera mas dinamico, permitiendo por ejemplo hacer cambios como por ejemplo agregar un ingrediente en una ventana y que se vea reflejado en la otra sin tener que bloquearla, poder hacer hacer varias cosas a la vez sin tener que estar bloqueado en un paso, y teniendo en cuenta los cambien es un lado afectan direstamente a las otras tablas y las otras interfaces..
Inventa tu propio sistema de "broadcasting" entre formularios :P se puede hacer, pero depende del escenario en el que estan los controles, y olvidate de la programacion en capas y dataset tipados :P
O sea, viaja doble informacion, se guarda en la base de datos, y la misma "fila nueva" la agregas/cambias en tu lista :)
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
Si, un par de mensajes atras me di por vencido... bueno momento de ver como hacerlo, no me va a ganar!!! va a funcionar a la fuerza. Realmente pense que mi inexperiencia en bases de datos y vb.net me estaba matando pero al parecer hay metodos preestablecidos que no queria seguir... pero "volvere y sere una madita interfaz interactiva"!
Eso fue de nerd :p, Gracias por la guia ejemplos y consejos, ahora ponerle tinto (Santa Florentina - malbec syrah) y ver de resolver esto.
-
Solo habría que definir cuando algo así es realmente necesario. Quizá en un proyecto para un agente de bolsa, quizá un proyecto para cálculos científicos, ojo, considera bien el motor que usarías para algo asi... Access nica jeje.
-
Relamente no hay "necesidad" es simplemente mi capricho, esto de las bases de datos no es mi rubro pero si hago algo paso por aca y comparto.
-
Antes de que valla a algun lado, un par de cosa que quedaron ene l tintero "escaping characters"?
-
Yo tuve bronca una vez con el tema del timer y actualización en la BD.
El asunto era sobre Cola de Pedidos en una tienda, en la caja debia aparecer un aviso (por segundo) de que un nuevo pedido existe y el cajero (que a veces estaba distraído) sea avisado por el sistema.
La joda vino cuando quería seleccionar el pedido del grid y nuevamente se hacia la consulta automática se me deseleccionaba el grid... Asi que lo resolvimos cambiando de color a un label a "verde maricon" y que se actualizaba por segundo. Quiza era algo para mejorar a nivel de la aplicación.
No se, pero en asunto de avisos automáticos solo he usado lo que acabo de explicar y donde si le meti harta letra fue en los DashBoard. Llegue hasta 15 consultas simultaneas en un solo form que se actualiza cada 2 segundos y eso lograba que el dueño del negocio se sienta mas dios.
-
Relamente no hay "necesidad" es simplemente mi capricho, esto de las bases de datos no es mi rubro pero si hago algo paso por aca y comparto.
Esta bien, es bueno innovar. Ahora que lo mencionas, si hice (en realida me uni cuando estaba empezado, pero ayude mucho a terminarlo) lo que pedias.
Guardar a base de datos y agregar/editar una fila del listview sin necesidad de vaciarlo y rellenar desde un recorset. Y en el form_activate pedir "las novedades" (ultimos 10 y hacer una interseccion, si ninguno esta repetido, pedir 10 mas hasta que, o bien copiar la tabla entera o llegar al punto donde los datos nuevos se terminaron).
No fue tan dificil (me costo un poco la interfaz dinamica) pero lo logre. Lo hice en vb6
-
Nadie me da bola con lo de "escaping characters".... :(
-
justo lo estaba bien "escaping characters" pero no manyo que es eso.
pd.: Hace rato yo también me sentia que nadie me daba bola y mi mouse ya estaba en la X del Chrome 2 veces jajaja
-
Antes de que valla a algun lado, un par de cosa que quedaron ene l tintero "escaping characters"?
No entendi que quisiste plantear :P
-
Es cuando en un string se utilizan caracteres "comodines" como comillas simples etc que joden la consulta y hay que escaparlos por ejemplo en access se usan dos comillas cuando el texto tiene una como "John's car".
-
Es cuando en un string se utilizan caracteres "comodines" como comillas simples etc que joden la consulta y hay que escaparlos por ejemplo en access se usan dos comillas cuando el texto tiene una como "John's car".
vos decis tipo inyeccion sql que te hacen saltar las consultas ?
yo no le dejaria meter esos caracteres o directamente se los reemplazo.
-
Ahhh... En .net se encarga de eso con OleDbCommand o SQLCommand y parametros en la misma consulta
Ahora estoy desde el celular,pero mañana te subire el ejemplo ;)
Seria algo asi
Dim command As OleDbCommand
Command.CommadText = "SELECT * FROM ingredientes WHERE Nombre LIKE @nombre"
Command.Parameters.Add("@nombre", dbVarchar)
Command.Parmmeters["@nombre"].Value = txtNombre.text
rdResultado = Command.ExecuteReader()
'Despues rellenas la grilla :P
-
si yo pongo por ejemplo "DELETE FROM tabla WHERE columna = 'John's car'; " eso explota, porque la comilla simple no esta escapada, para que funcione lo tendri a que poner asi "DELETE FROM tabla WHERE columna = 'John''s car'; "
-
vos decis tipo inyeccion sql que te hacen saltar las consultas ?
yo no le dejaria meter esos caracteres o directamente se los reemplazo.
Exacto, yo hago lo mismo, Solo dejo meter al usuario una cierta cantidad de caracteres, salvo que no sean los campos Memo, no le permito caracteres especiales y todo lo grabamos con Mayusculas pa q no jodan. Aun no encuentro el primer cliente que me insista grabar en la BD: John's Car salvo que se porte con sus 500 gringas mínimo jaja. En ese caso el graba: JOHNS CAR
De ser asi, tambien haria el asunto de la doble comilla que ya probe y funciona pero es ligeramente diferente en FB.
-
si yo pongo por ejemplo "DELETE FROM tabla WHERE columna = 'John's car'; " eso explota, porque la comilla simple no esta escapada, para que funcione lo tendri a que poner asi "DELETE FROM tabla WHERE columna = 'John''s car'; "
Pucha doc, yo jamas me he visto en esa situación, en mas de 10 años nunca tuve que borrar un registro usando algún campo string. En el ejemplo que das yo haría "Delete From Tabla Where Id = 12" y el 12 es Jhon car.
-
interesante raul338, asi podria tener la consulta almacenada en cualquier lado y simplemente insertar los datos, eso simplifica las cosas muchisimo.
-
interesante raul338, asi podria tener la consulta almacenada en cualquier lado y simplemente insertar los datos, eso simplifica las cosas muchisimo.
Te dije que .net soluciona muchas cosas :P
Ese codigo asi como esta dudo que funcione. Pero reescribilo que el intellisense te ayudará muchismo
-
interesante raul338, asi podria tener la consulta almacenada en cualquier lado y simplemente insertar los datos, eso simplifica las cosas muchisimo.
Te dije que .net soluciona muchas cosas :P
Ese codigo asi como esta dudo que funcione. Pero reescribilo que el intellisense te ayudará muchismo
Si pero tengan piedad, estamos en VB6 jajaja, hay un foro de .Net ya creado usenlo jajajaj (broma)
-
Perdon por salir de tema, mi consulta principal era referida a bases de datos, ningun lenguaje o motor en particular.
-
Perdon por salir de tema, mi consulta principal era referida a bases de datos, ningun lenguaje o motor en particular.
Aun en el caso que no fuese .net, siempre, SIEMPRE use lo que seria escapar caracteres estilo URL asi nunca tenia drama por eso :P