Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 24-03-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola Lepe ahora si que estoy perdido no se ni que hacer.. o no te entendí bién esta frase:

Cita:
Lo que pides es muy muy fácil, ahora no puedes usar DBEdits, porque no vas a tener 6 precios, al tener la tabla tarifas el usuario podrá crear 10 o 100 precios distintos....
Pues te diré que solo serán 6 precios.. ademas el problema principal no es ese, si no que tiene que calcularse los porcentaje tanbién, y eso lo hacía como muestro en mi anterior POST

Cita:
por tanto usa un grid atado a un Query:

Yo no uso MySql, pero seguro que tiene un componente llamado MyDataset que tiene 4 sqls:
- Delete
- Insert
- Update
- Select

Rellenando cada una de ellas, puedes mostrar en el grid todas las tarifas y precios y que se puedan modificar desde el mismo grid. En el MyDataset puedes asignarle su propiedad MasterSource al DataSource de Productos, de esa forma al cambiar de producto, se muestran en el grid las tarifas del nuevo Producto elegido.
Pues no entiendo a que se refiere con MyDataSet.. tal vés se que es pero no con ese nombre.. por que soy nuevo en esto. perdón por no comprender.

Cita:
Los precios de la tabla productos... sobran, debes eliminarlos.
Si señor, ya están eliminados los precios. y los manejaré en la otra tabla.

Cita:
Necesitas urgentemente dejar de programar y pararte a estudiar los conceptos de la tecnología Cliente/Servidor, Diseños de Bases de datos y Normalización de tablas.
Creo que mi problema en este momento es delphi no MySQL.. por que ya probé mi base de datos y si está todo en orden cuando hago un

Código SQL [-]
DELETE FROM productos WHERE id_producto = 1

me elimina todos los datos del id_producto 1 como debe ser, y además elimina de la tabla TARIFAS todos las listas de precios que tienen el id_producto = 1

Osea que esta funcionando bién, ahora mi problema sería con delphi que no se como enlazar los componentes Zquery, Z,Table, DataSource uno con otros para soluionar mi problema.. bueno espero poder haber sido claro, y creo que estoy a punto de superar este mi problema.. se que es algo fácil pero que no puedo darme cuenta, necesito un empujoncito Lepe

saludos
Responder Con Cita
  #22  
Antiguo 24-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Los cálculos de porcentajes deberías hacerlos antes de guardar, ya que al presionar una tecla, si usa retroceso para borrar todos los caracteres, cuando no quede ninguno, obtendrás un bonito " '' is not a valid float".

El cálculo, igual pero más simple:
Código Delphi [-]
precio := (StrToInt(DBEPrecio1.Text) * 1.16 ;

Incluso podría hacerse en un trigger before update y before Insert, los cálculos los haría el servidor y no tú desde delphi. Esta idea no viene de la nada, viene de haber leído los manuales de Interbase 6 y Firebird, de ahí que te sugiera estudiar lo propio en MySql. Sabiendo de antemano que es un trigger, como funciona, como se implementa, cuando se ejecuta, etc, tendrás tu mente "más abierta" para solucionar los problemas que te lleguen.

La verdad es que me he confundido con el tema de "MyDataset". Si usas los componentes Zeos, tendrás un ZTable, ZQuery, ZDataset (éste último es al que me refiero), en cliente servidor jamás debería usarse un ZTable, ese componente yo lo veo ahí por compatibilidad y migración, pero no para usarlo en aplicaciones nuevas. Deberías usar un ZDataset y traer solo el registro que desees modificar.

Por mi desconocimiento de los componentes Zeos, no sé si existirá el componente "ZDataset" con ese nombre, puede que tenga otro nombre... a ver si alguien que trabaje con Zeos puede ser más específico.

Para el problema de "unir querys con Grids y demás" mira en la cara oculta de delphi 4, las relaciones Maestro-Detalle es lo que necesitas.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #23  
Antiguo 24-03-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Bueno pues según lo que ví en las componentes ZEOS tengo esto en las paletas

ZConnection: TZConnection
ZReadOnlyQuery: ZDataSet
ZQuery: ZDataSet
ZTable : ZDataSet
ZUpdateSQL: ZsqlUpdate
ZStoredProc: ZstoredProcedure
ZSQLMetadata: ZSQLMetadata
ZSQLProcessor: ZSQLProcessor
ZSQLMonitor : ZSQLMonitor
ZSequence : ZSequence

Bueno supongo que alos que te refieres don ZDataSet es a los 3 componentes no ?? pero mas seguro solo el ZQUERY por que me dijiste que decarte el STable, bueno eso es lo que haré entonces..

ahora con respecto al porcentaje pues lo tendré que hacer de tu modo por que como dices avees me daba el No is valid integer pero no era bonito era feo xDD

y ahora sobre los tigers me pondré mañana mismo a leer sobre eso tenloo por seguro al igual que lo hice con la integridad referencial que me lo aprendí muy bién y ahora se algo nuevo

ahora sobre el maestro detalle, eso es lo que quería saber.. no sabía con que nombre buscar eso, ahora que lo se tambien tenlo por seguro que lo leere, ya que tengo aquí la cara oculta de delphi 4 y otros manuales en pdf muy buenos. ademas de un libro de anaya que esta bién nomas..

bueno pues Lepe muchas gracias por las recomendaciones y consejos, se que me servirán de ahora en delante para hacer mas sencillas las cosas

saludos y gracias nuevamente.

PD mañana posteo algunas dudas xDD
Responder Con Cita
  #24  
Antiguo 27-03-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Bueno aquí vendo despuies de 2 días haber escrito mi último post
Lepe mira, he estado leyendo todos estos días el foro-.. buscando sobre maetro/detalle y encontré vários temas pero no logro entender su funcionamiento.. vamos me doy cuenta de lo que se devería hacer un maestro/detalle, aquí encontré un post explican algo de eso y logré entender algo
http://www.clubdelphi.com/foros/show...aestro+detalle

Pero no es suficiente para poder hacer lo que yo quiero.. en primer lugar NO quiero poner ningún DBGrid en mi form.. con DBEdits me bastaría, tu dices que me olvide de los DBEdits y las ZTAbles, entonces como guardaría un producto ??
SI ya se que se podría hacer con SQL y no es difícil, pero tendría que tomar los datos de Edits verdad ?? o de donde mas lo tomaría ?? ahora.. mi problema esta en querer actualizar un producto y sus 6 precios que tengo en la otra base de datos, podría ser con puro SQL pero SE que no es lo correcto hacerlo, creo que debe haber alguna manéra de hacerlo mas sencillo
Lo único que pretendo hacer es esto:

Agregar un nuevo producto llenando unos DBEdits o EDits, luego llenar tambien unos DBEdits o Edits con los 6 precios que se alamcenarán en la otra tabla TARIFAS, bueno eso lo hice con SQL y copié el id_producto a la tabla TARIFAS por cada producto, cosa que quedaría así
Un producto con todas las descripciones en la tabla PRODCUTOS y los 6 precios y sus códigos en la tabla TARIFAS, bueno hasta haý no hay problema, por que cuando elimino un producto tam,bién se eliminar los 5 precios, PERO el problema está al editar un producto no edita en la tabla TARIFAS con mi código que puse en los anteriores post, lo único que hace es editar los campor de la tabla PRODCUTOS pero NO edita los 6 precios y códigos de la tabla TARIFAS, lo que hace es agregarme los mismos 6 precios ( en el caso de que no modificaron los precios ) con el mismo id_producto, osea serían 12 precios para el id_producto y si otra ves actualizo me graba 6 precios mas xDD osea 18 ya serían.. lo único que quiero es que UPDATE los precios y códigos en la tabla TARIFAS.. eso es lo que quiero saber.. si tendría que hacerlo puro SQL ?? o hay algún componete como el ZUpdateQUery ???? he estado leyendo tambien sobre en en este tema
http://www.clubdelphi.com/foros/show...=3802#post3802

o se si me serviría pero bueno.. para que no digan que no busco o que no leo la verdad es que me frustra no poder hacer algo tan secillo que parece.. y se que cuando aprenda diré : oh he sido un tonto al no poder hacer algo tan sencillo

Y otra cosa.. que acreo que aquí viene lo de master/detail es que quiero mostrar los datos de los productos todo en uno, osea descripciones del producto que leere de la tabla PRODCUTOS y sus precios y códigos que leeré de la tabla TARIFAS, bueno ahora eso lo tengo que hacer puro SQL también ?? o con master/detail solo tengo que escojer los campos de las tablas ?? no entiendo muy bién que inutil que soy

Bueno creo que lo mejor me vendría es un pequeño ejemplo de lo que pretendo hacer,

aquí les dejo una pequeña base de datos relacionales.

Código SQL [-]
-- Base de datos: `test`

CREATE TABLE `cliente` (
  `id_cliente` int(11) NOT NULL,
  `nombre` varchar(30) default NULL,
  PRIMARY KEY  (`id_cliente`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `venta` (
  `id_factura` int(11) NOT NULL,
  `id_cliente` int(11) NOT NULL,
  `cantidad` int(11) default NULL,
  PRIMARY KEY  (`id_factura`),
  KEY `id_cliente` (`id_cliente`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- 
-- Filtros para la tabla `venta`
-- 
ALTER TABLE `venta`
  ADD CONSTRAINT `venta_ibfk_1` FOREIGN KEY (`id_cliente`) REFERENCES `cliente` (`id_cliente`) ON DELETE CASCADE ON UPDATE CASCADE;

Bueno a ver si alguien TAN amable me hace un ejemplo con esa pequeña base de datos.. como poder agregar 6 catidades para un mismo id_cliente y luego poder editarlo esto,,, además un master/detail con eso
La verdad es que solo con eso creo que aprenderé o mejor dicho me daré cuenta en que es lo que fallo y que conceptos tengo mal definidos de lo que leí

saludos y gracias por la ayuda
Responder Con Cita
  #25  
Antiguo 27-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Como ya te dije, usa un ZDataset, es lo que necesitas para editar, insertar, borrar y seleccionar de una tabla.

Mira en este hilo los mensajes 7 y 8

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #26  
Antiguo 31-03-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Cita:
Empezado por Lepe
Como ya te dije, usa un ZDataset, es lo que necesitas para editar, insertar, borrar y seleccionar de una tabla.

Mira en este hilo los mensajes 7 y 8

Saludos
Me he leido todos los mensajes.. y lo que aún no entiendo es que me mandas a usar un ZDataset pero sigo sin saber que es eso.. lo que se es que es un componente, pero te refieres al ZQuery ?? o el ZQUptadeSQL ??
Y me mandas a al mensaje 7, 8 donde claramente tu recomiendas unos componentes diferentes a los que suo, yo uso ZEOSlib + MYSQL y los que aconsejas con para Firebird

http://www.clubdelphi.com/foros/show...65&postcount=7

Esos componentes pueden que tengas uno llamado MDODataset pero aquí no tengo alguno que se parece pero es obvio puesto que uso los ZEOS, ahora mi pregunta es.. ese ZDataset al que te refieres es el ZUpdateSQL que tienen las ZEOS ??? y en el aterior post te puse los componentes que tengo en esa paleta, pero te las pongo de nuevo por si no las viste.

ZConnection: TZConnection
ZReadOnlyQuery: ZDataSet
ZQuery: ZDataSet
ZTable : ZDataSet
ZUpdateSQL: ZsqlUpdate
ZStoredProc: ZstoredProcedure
ZSQLMetadata: ZSQLMetadata
ZSQLProcessor: ZSQLProcessor
ZSQLMonitor : ZSQLMonitor
ZSequence : ZSequence

Bueno yo ahora estoy usando ZQuery para insertar registros pero la verdad es que es un lio.. por que tengo que usar 2 para cada tabla se que lo hago mal. pero así funciona, la cosa es a la hora de actualizar, no tengo la menos idea de como hacerlo con unos Edits, puesto que ya no uso los DBEdits, lo que estaba haciendo es hacer una busqueda del producto a editar luego llenar los campos Edits, pero tengo problemas al llenar unos DBLookComboBox que son los que llenan sus Items leyendo de otra tabla, bueno creo que estoy muy perdido o es que me he confundido demasiado y quiero salir de esto
Este es el código que estoy usando para agregar las descripciones de los productos a la tabla PRODUCTOS y códigos, precios, y listaprecios a la tabla TARIFAS

Código Delphi [-]
  if (ECodigoBarra.Text = '') then
  begin
    ShowMessage('Ingresa un valor para el Código de barra.');
  end
  else
  begin
    //Armamos el query (INSERT) para agregar los datos del producto.
    DM.ZQProductos.Close;
    DM.ZQProductos.SQL.Clear;
    DM.ZQProductos.SQL.Add('INSERT INTO productos (Descripcion, Categoria, SubCategoria, Unidad, Cantidad, Proveedor, ');
    DM.ZQProductos.SQL.Add('UnidadPrecio, PrecioCompraBs, PrecioCompraSus, Costo, FechaActualizacion)');
    DM.ZQProductos.SQL.Add('VALUES (es, :Cat, :SubCat, :Uni, :Cant, :Prov, :UniPre, :PCB, :PCS, :Cos, :FechAct)');
    //Asignamos los parámetros tomados de los edits.text
    DM.ZQProductos.ParamByName('Des').AsString := MDescripcion.Text;
    DM.ZQProductos.ParamByName('Cat').AsString := DBLCBCategoria.Text;
    DM.ZQProductos.ParamByName('SubCat').AsString := DBLCBSubCategoria.Text;
    DM.ZQProductos.ParamByName('Uni').AsString := DBLCBUnidad.Text;
    DM.ZQProductos.ParamByName('Cant').AsString := ECantidad.Text;
    DM.ZQProductos.ParamByName('Prov').AsString := DBLCBProveedor.Text;
    DM.ZQProductos.ParamByName('UniPre').AsString := DBLCBUnidadPrecio.Text;
    DM.ZQProductos.ParamByName('PCB').AsString := EPrecioCompraBs.Text;
    DM.ZQProductos.ParamByName('PCS').AsString := EPrecioCompraSus.Text;
    DM.ZQProductos.ParamByName('Cos').AsString := ECosto.Text;
    DM.ZQProductos.ParamByName('FechAct').AsDateTime := DateTimePicker1.Date;
    DM.ZQProductos.ExecSQL;
    //DM.ZQProductos.Open;
    //DM.ZQProductos.Refresh;
    //DM.ZQProductos.Last;
    DM.ZTProductos.Refresh;
    DM.ZTProductos.Last;

  with DM.ZQTarifas do
  begin
    Close;
    SQL.Clear;
    SQL.Add('INSERT INTO tarifas (Id_producto, CodigoBarra , CodProducto , TipoTarifa , Precio)');
    SQL.Add('VALUES (:IDP, :CB, :CP, :TT1, :P1), ');
    SQL.Add('(:IDP, :CB, :CP, :TT2, :P2), ');
    SQL.Add('(:IDP, :CB, :CP, :TT3, :P3), ');
    SQL.Add('(:IDP, :CB, :CP, :TT4, :P4), ');
    SQL.Add('(:IDP, :CB, :CP, :TT5, :P5), ');
    SQL.Add('(:IDP, :CB, :CP, :TT6, :P6)');

    // Si, asignamos los parámetros xDD
    ParamByName('IDP').AsInteger := DM.ZTProductos.FieldByname('Id_producto').AsInteger;
    ParamByName('CB').AsString := ECodigoBarra.Text;
    ParamByName('CP').AsString := ECodProducto.Text;

    ParamByName('TT1').AsString := 'Precio1';
    ParamByName('TT2').AsString := 'Precio2';
    ParamByName('TT3').AsString := 'Precio3';
    ParamByName('TT4').AsString := 'Precio4';
    ParamByName('TT5').AsString := 'Precio5';
    ParamByName('TT6').AsString := 'Precio6';

    ParamByName('P1').AsString := EPrecio1.Text;
    ParamByName('P2').AsString := EPrecio2.Text;
    ParamByName('P3').AsString := EPrecio3.Text;
    ParamByName('P4').AsString := EPrecio4.Text;
    ParamByName('P5').AsString := EPrecio5.Text;
    ParamByName('P6').AsString := EPrecio6.Text;
    // Ejecutamos e insertamos todos los valores asignados
    ExecSQL;
  end;

  end;
end;

bueno por lo que verán es demasiado largo y se que se puede hacerlo mas fácil pero no lo se,

saludos y espero me ayuden
Responder Con Cita
  #27  
Antiguo 01-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Lo siento, como ves no uso esos componentes. Los ví cuando lo pusiste la primera vez, pero como no los conozco, no respondí, estuve esperando que otra persona que use Zeos pudiera afirmarlo.

Deber... debe exister ese componente, o quizás no lo hayan creado aún... en definitiva, no puedo asegurarte nada.

Siento mi última intervención.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #28  
Antiguo 01-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Lepe pero tengo un componente que se llama ZsqlUpdate.. tiene esas 3 propiedades.. insert, delete, update creo que es a ese que te refieres no ??
no me abandones xDDDD


saludos, a ver si álguien mas me echa una mano que tengo ganas de aprender

salud!
Responder Con Cita
  #29  
Antiguo 01-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Es que, no lo sé.

Yo tengo un MDODataset y un MDOUpdateSql, y son componentes distintos, el segundo no se usa igual que el primero. No tengo ni idea si en Zeos le han cambiado el nombre.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #30  
Antiguo 02-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
jeje bueno Lepe, pero tranquilo, no te enojes xDD (broma)

Ya, ahora a esperar que álguien sepa o seguir buscando info, no creo que nadie haya necesitado alguna vés estos componentes con MySQL y tablas relacionales


saludos y gracias
Responder Con Cita
  #31  
Antiguo 10-04-2007
d-hugo d-hugo is offline
Miembro
 
Registrado: abr 2007
Posts: 34
Poder: 0
d-hugo Va por buen camino
Algunas observaciones (disculpa el atrevimiento):
Para dinero en lugar de utilizar un campo FLOAT usa NUMERIC que guarda un valor exacto, el float redondea cada vez que se usa por lo que usarlo para dinero no es recomendable.
Ten presente que si borras un producto, proveedor, cliente o cualquier otro nomenclador que hayas usado en documentos comerciales, perderás el historial. En el lugar donde trabajo esto es inaceptable, por lo que yo suelo usar un campo boolean para definir si el nomenclador está activo o no.
No veo el objetivo de tener 6 precios en la base de datos si 5 siempre se van a calcular de la misma manera a partir del primero. Bien puedes calcular los valores en el momento en que vayas a mostrarlos en el formulario. Pero bueno, si vas a usar la tabla de precios, por qué mejor no usar solo el foreign key a id_producto y así no solo te ahorras ambos códigos, sino que puedes realizar joins y mostrar los campos que quieras?
Otra cosa es que en vez de usar un stringgrid quizás sería mejor usar un clientdataset para así poder hacer updates más comodamente, creo que de hecho te simplificaría más las cosas porque podrías usar controles db-aware y usar instrucciones SQL que son más sencillas.
En fin, suerte.
Responder Con Cita
  #32  
Antiguo 10-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola gracias por los consejos, me servirán de mucho y tendré muy en cuenta sobre los precios, pues no lo sabía, ahora sobre los precios ya lo he discutido con mi jefe, yo quiería hacer así, tener un precios _base_ y a este asignarle 6 porcentajes diferentes para calcular el resto de los precios al momento de ponerlos al StringGrid Por ej, pero bueno jeje hay que hacer caso a los jafes y mas aún siendo este mi primer jefe xD
Ahora ya lo tengo todo listo.. he echo todo una chapucera, pero funciona
ahora mismo son las 3:00 am en mi País y mañana pienso poner el código para que a alguien mas le sirva, aunque es mucho pero igual xD

saludos d-hugo

PD ahh es que ya tengo casi todo en mi stringGrind, sería como comenzar casi de nuevo con lo mucho que me esta costando
Responder Con Cita
  #33  
Antiguo 10-04-2007
d-hugo d-hugo is offline
Miembro
 
Registrado: abr 2007
Posts: 34
Poder: 0
d-hugo Va por buen camino
Cita:
Empezado por BlackDaemon
ahh es que ya tengo casi todo en mi stringGrind, sería como comenzar casi de nuevo con lo mucho que me esta costando
Sí, ese es el inconveniente, especialmente si tienes la aplicación muy adelantada. En todo caso bien puedes probarlo en un formulario que aun no hayas hecho, o cuando termines puedes hacer un proyecto de prueba a ver si usar clientdatasets te resulta mas simple.

Última edición por d-hugo fecha: 10-04-2007 a las 10:52:50.
Responder Con Cita
  #34  
Antiguo 10-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Cita:
Sí, ese es el inconveniente, especialmente si tienes la aplicación muy adelantada. En todo caso bien puedes probarlo en un formulario que aun no hayas hecho, o cuando termines puedes hacer un proyecto de prueba a ver si usar clientdatasets te resulta mas simple.
Bueno esta bién, ya lo había tenido pensado eso, luego hacer otra app sacando las mejoras de esta y actualizando todo lo que se pueda, pero tengo una duda, cuando hablas de clientdatasets a que te refieres ?? Osea a que componente :
ahh tambien si me podría aclarar las dudas con el DATASET de los componentes ZOES lib, por que por lo que veo no las tienen y me han recomendado mucho

saludos
Responder Con Cita
  #35  
Antiguo 10-04-2007
d-hugo d-hugo is offline
Miembro
 
Registrado: abr 2007
Posts: 34
Poder: 0
d-hugo Va por buen camino
Cita:
Empezado por BlackDaemon
tengo una duda, cuando hablas de clientdatasets a que te refieres ?? Osea a que componente :
ahh tambien si me podría aclarar las dudas con el DATASET de los componentes ZOES lib, por que por lo que veo no las tienen y me han recomendado mucho
El ClientDataSet es un componente del Delphi (al menos del D7 enterprise), basicamente lo que hace es una base de datos virtual en memoria, con todas las propiedades normales de una base de datos. Pero también podrías usar el componente llamado KbmMemTable, que tiene buena reputación en cuanto a rapidez y funcionalidad, parece que es incluso mejor que el propio ClientDataSet. Haz una busqueda.

Con respecto al ZEOS, no puedo decirte la gran cosa, porque no lo he probado.
Responder Con Cita
  #36  
Antiguo 10-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Bueno si, pero Lepe me ha hablado mucho de DataSet pero no los tengo en los ZEoS y si, si he visto el ClientDataSet, pero pensé que te referías a otro de los Zeos por ej, ahora como se usaría un ClientDataSet, y tu me dijiste que use en ClientDataSet en ves de un StringGrid pero la verdad es que yo no los veo nada de parecidos.. al princípio pensé que te referías al DBGrid pero veo que no, si me aclaras mis dudas te estaría muy agradecido.

saludos
Responder Con Cita
  #37  
Antiguo 12-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Bueno despues de tanto luchar con este tema.. lo he logrado de una manera que aún no me convence pero que da resultados buenos, pero tambien tiene muuuuuchas contras, sin mas aquí les dejo mi código por si alguien lo quisiera usar, aunque estoy seguro que solo serviría para confundir aún mas

Bueno comenzemos.. como ya tengo las 2 tablas PRODUCTOS y la tabla TARIFAS en los anteriores post puse la estructura, así que no la repetiré
Asi que este es el código con el cual AGREGO tooooodos los campos que tengo en diferentes edits y DataBaseComboBoxsLoock y un meno.

AGREGAR PRODUCTOS

Tengo estas variables definidas

Código Delphi [-]
var
  FrmAgregarProductos: TFrmAgregarProductos;
  Editando : Boolean;
  idTarifa, prec1Old, prec2Old, prec3Old, prec4Old, prec5Old, prec6Old : Integer;
  codBarOld, codProOld : String;


Y el código del botón agregar si, ya se que esta largo y feo

Código Delphi [-]
procedure TFrmAgregarProductos.SBAgregarClick(Sender: TObject);
var
  idProducto : Integer;
begin
  if (ECodProducto.Text <> '') then
  begin
    if (ECodigoBarra.Text <> '') then
    begin
      if (MDescripcion.Text <> '') then
      begin
        if (DBLCBCategoria.Text <> '') then
        begin
          if (DBLCBSubCategoria.Text <> '') then
          begin
            if (ECantidad.Text <> '') then
            begin
              if (DBLCBUnidadPrecio.Text <> '') AND (DBLCBUnidad.Text <> '') then
              begin
                //Insertamos todos los registros de los campos Edits, DBComboBox, etc
                with DM.ZQProductos do
                begin
                  Close;
                  SQL.Clear;
                  SQL.Add('INSERT INTO productos (Descripcion, Categoria, SubCategoria, Unidad, Cantidad, Proveedor, ');
                  SQL.Add('UnidadPrecio, PrecioCompraBs, PrecioCompraSus, Costo, FechaActualizacion)');
                  SQL.Add('VALUES (es, :Cat, :SubCat, :Uni, :Cant, :Prov, :UniPre, :PCB, :PCS, :Cos, :FechAct)');
                  //Asignamos los parámetros tomados de los edits.text
                  ParamByName('Des').AsString := MDescripcion.Text;
                  ParamByName('Cat').AsString := DBLCBCategoria.Text;
                  ParamByName('SubCat').AsString := DBLCBSubCategoria.Text;
                  ParamByName('Uni').AsString := DBLCBUnidad.Text;
                  ParamByName('Cant').AsString := ECantidad.Text;
                  ParamByName('Prov').AsString := DBLCBProveedor.Text;
                  ParamByName('UniPre').AsString := DBLCBUnidadPrecio.Text;
                  ParamByName('PCB').AsString := EPrecioCompraBs.Text;
                  ParamByName('PCS').AsString := EPrecioCompraSus.Text;
                  ParamByName('Cos').AsString := ECosto.Text;
                  ParamByName('FechAct').AsDateTime := DateTimePicker1.Date;
                  //Executamos todo e insertamo en la tabla Productos
                  ExecSQL;
                end;
                //Sacamos el último ID de la tabla productos.. sería el ID del producto insertado
                with DM.ZQProductos do
                begin
                  Close;
                  SQL.Clear;
                  SQL.Add('SELECT max(id_producto) as xxx FROM productos');
                  Open;
                end;
                  idProducto := DM.ZQProductos.fieldByName('xxx').AsInteger;
                //Insertamos ahora los campo "id_producto ( este es de la tabla productos )
                //Código, Código Producto, precio1, precio2... precioN en la tabla Tarifas
                with DM.ZQProductos do
                begin
                  Close;
                  SQL.Clear;
                  SQL.Add('INSERT INTO tarifas (Id_producto, CodigoBarra , CodProducto , ListaPrecio , Precio)');
                  SQL.Add('VALUES (:IDP, :CB, :CP, :LP1, rec1), ');
                  SQL.Add('(:IDP, :CB, :CP, :LP2, rec2), ');
                  SQL.Add('(:IDP, :CB, :CP, :LP3, rec3), ');
                  SQL.Add('(:IDP, :CB, :CP, :LP4, rec4), ');
                  SQL.Add('(:IDP, :CB, :CP, :LP5, rec5), ');
                  SQL.Add('(:IDP, :CB, :CP, :LP6, rec6)');
                  //Asignamos parámetros que se repiten en los 6 campos
                  ParamByName('IDP').AsInteger := idProducto;
                  ParamByName('CB').AsString := ECodigoBarra.Text;
                  ParamByName('CP').AsString := ECodProducto.Text;
                  //Asignamos parámetros a las lista de precios que son 6
                  ParamByName('LP1').AsString := 'precio1';
                  ParamByName('LP2').AsString := 'precio2';
                  ParamByName('LP3').AsString := 'precio3';
                  ParamByName('LP4').AsString := 'precio4';
                  ParamByName('LP5').AsString := 'precio5';
                  ParamByName('LP6').AsString := 'precio6';
                  //Asignamos parámetro a los precios que tambien son 6
                  ParamByName('prec1').AsInteger := StrToInt(EPrecio1.Text);
                  ParamByName('prec2').AsInteger := StrToInt(EPrecio2.Text);
                  ParamByName('prec3').AsInteger := StrToInt(EPrecio3.Text);
                  ParamByName('prec4').AsInteger := StrToInt(EPrecio4.Text);
                  ParamByName('prec5').AsInteger := StrToInt(EPrecio5.Text);
                  ParamByName('prec6').AsInteger := StrToInt(EPrecio6.Text);
                  ExecSQL;
                end;
                ModoEditar(False);
                SBAgregar.Enabled := False;
                SBCancelar.Enabled := False;
                SBNuevo.Enabled := True;
                SBEditar.Enabled := True;
                SBEliminar.Enabled := True;
                //Mostramos mensajes si los campos están vacíos
              end
              else
              begin
                ShowMessage('Los campos Unidad no pueden estar vacíos');
              end;
            end
            else
            begin
              ShowMessage('El campo Cantidad no puede estar vacío');
            end;
          end
          else
          begin
            ShowMessage('El campo proveedor no puede estar vacío');
          end;
        end
        else
        begin
          ShowMessage('El campo Categoría no puede estar vacío');
        end;
      end
      else
      begin
        ShowMessage('El campo Descripción no puede estar vacío');
      end;
    end
    else
    begin
      ShowMessage('El campo Código Barra no puede estar vacío');
    end;
  end
  else
  begin
    ShowMessage('El campo Código no puede estar vacío');
  end;

end;



pfff Bueno ahora toca el código de edición, para lo cual realizo una búsqueda por CodigoBarra y llenos los edits, DataBaseComboBoxLook y el meno

BUSCAR Y LLENAR LOS COMPONTES

Todo esto en el evento OnClik del boton búsqueda

Código Delphi [-]
procedure TFrmAgregarProductos.SBBuscarClick(Sender: TObject);
begin
  if (EPalabra.Text <> '') then
  begin
    //llenamos el edit Precio1 y los edits codigos
    with DM.ZQBusqProducto do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM tarifas WHERE CodigoBarra = :CB AND ListaPrecio = :LP1');
      //SQL.Add('SELECT * FROM tarifas WHERE codigo LIKE "%' +EPalabra.Text+ '%"');
      ParamByName('CB').AsString := EPalabra.Text;
      ParamByName('LP1').AsString := 'Precio1';
      Open;
    end;
    EPrecio1.Text := IntToStr(DM.ZQBusqProducto.FieldByName('precio').AsInteger);
    //tenemos el id_producto para usarlo en en query para la tabla productos
    idTarifa := DM.ZQBusqProducto.FieldByName('id_producto').AsInteger;
    codBarOld := DM.ZQBusqProducto.FieldByName('CodigoBarra').AsString;
    codProOld := DM.ZQBusqProducto.FieldByName('CodProducto').AsString;
    prec1Old := DM.ZQBusqProducto.FieldByName('precio').AsInteger;
    //Lenamos el campo Edit CódigoBarra y CodProducto
    ECodProducto.Text := DM.ZQBusqProducto.FieldByName('CodProducto').AsString;
    ECodigoBarra.Text := DM.ZQBusqProducto.FieldByName('CodigoBarra').AsString;
    //Llenamos el edit precio2
    with DM.ZQBusqProducto do
    begin
      Close;
      SQl.Clear;
      SQL.Add('SELECT * FROM tarifas WHERE CodigoBarra = :CB AND ListaPrecio = :LP2');
      ParambyName('CB').AsString := EPalabra.Text;
      ParamByName('LP2').AsString := 'precio2';
      Open;
    end;
    EPrecio2.Text := IntToStr(DM.ZQBusqProducto.FieldByName('precio').AsInteger);
    prec2Old := DM.ZQBusqProducto.FieldByName('precio').AsInteger;
    //Lenamos el edit cantidad3
    with DM.ZQBusqProducto do
    begin
      Close;
      SQl.Clear;
      SQL.Add('SELECT * FROM tarifas WHERE CodigoBarra = :CB AND ListaPrecio = :LP3');
      ParambyName('CB').AsString := EPalabra.Text;
      ParamByName('LP3').AsString := 'precio3';
      Open;
    end;
    EPrecio3.Text := IntToStr(DM.ZQBusqProducto.FieldByName('precio').AsInteger);
    prec3Old := DM.ZQBusqProducto.FieldByName('precio').AsInteger;
    //Lenamos el edit con Precio4
    with DM.ZQBusqProducto do
    begin
      Close;
      SQl.Clear;
      SQL.Add('SELECT * FROM tarifas WHERE CodigoBarra = :CB AND ListaPrecio = :LP4');
      ParambyName('CB').AsString := EPalabra.Text;
      ParamByName('LP4').AsString := 'precio4';
      Open;
    end;
    EPrecio4.Text := IntToStr(DM.ZQBusqProducto.FieldByName('precio').AsInteger);
    prec4Old := DM.ZQBusqProducto.FieldByName('precio').AsInteger;
    //llenamos el campo Precio5
    with DM.ZQBusqProducto do
    begin
      Close;
      SQl.Clear;
      SQL.Add('SELECT * FROM tarifas WHERE CodigoBarra = :CB AND ListaPrecio = :LP5');
      ParambyName('CB').AsString := EPalabra.Text;
      ParamByName('LP5').AsString := 'precio5';
      Open;
    end;
    EPrecio5.Text := IntToStr(DM.ZQBusqProducto.FieldByName('precio').AsInteger);
    prec5Old := DM.ZQBusqProducto.FieldByName('precio').AsInteger;
    //Llenamos el campo Precio6
    with DM.ZQBusqProducto do
    begin
      Close;
      SQl.Clear;
      SQL.Add('SELECT * FROM tarifas WHERE CodigoBarra = :CB AND ListaPrecio = :LP6');
      ParambyName('CB').AsString := EPalabra.Text;
      ParamByName('LP6').AsString := 'precio6';
      Open;
    end;
    EPrecio6.Text := IntToStr(DM.ZQBusqProducto.FieldByName('precio').AsInteger);
    prec6Old := DM.ZQBusqProducto.FieldByName('precio').AsInteger;
    //sacamos el id_tarifa de la otra tabla.
    //Llenamos los campos Descripcion y Categoria
    with DM.ZQBusqProducto do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM productos WHERE id_producto = :IDT');
      ParamByName('IDT').AsInteger := idTarifa;
      Open;
    end;
    //Lenamos toooodos los campos que faltan.. unidad, categoria , subCatetgoria..
    MDescripcion.Text := DM.ZQBusqProducto.FieldByName('descripcion').AsString;
    DBLCBCategoria.KeyValue := DM.ZQBusqProducto.FieldByName('Categoria').AsString;
    DBLCBSubCategoria.KeyValue := DM.ZQBusqProducto.FieldByName('SubCategoria').AsString;
    DBLCBProveedor.KeyValue := DM.ZQBusqProducto.FieldByName('Proveedor').AsString;
    DBLCBUnidad.KeyValue := DM.ZQBusqProducto.FieldByName('Unidad').AsString;
    DBLCBUnidadPrecio.KeyValue := DM.ZQBusqProducto.FieldByName('UnidadPrecio').AsString;
    ECantidad.Text := DM.ZQBusqProducto.FieldByName('Cantidad').AsString;
    ECosto.Text := DM.ZQBusqProducto.FieldByName('Costo').AsString;
    EPrecioCompraBs.Text := DM.ZQBusqProducto.FieldByName('PrecioCompraBs').AsString;
    EPrecioCompraSus.Text := DM.ZQBusqProducto.FieldByName('PrecioCompraSus').AsString;
    DateTimePicker1.Date := DM.ZQBusqProducto.FieldByName('FechaActualizacion').AsDateTime;
    //Abrimos los campos
    modoEditar(True);
    SBGuardar.Enabled := True;
    SBCancelar.Enabled := True;
    SBNuevo.Enabled := False;
    SBAgregar.Enabled := False;
    SBEditar.Enabled := False;
    SBEliminar.Enabled := False;
    SBDelete.Enabled := True;
  end
  else
  begin
    ShowMessage('Por Favor ingrese un código');
  end;
end;

continuaaa...
Archivos Adjuntos
Tipo de Archivo: zip maestro-detalle.zip (4,6 KB, 9 visitas)

Última edición por BlackDaemon fecha: 12-04-2007 a las 07:42:41.
Responder Con Cita
  #38  
Antiguo 12-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Bueno y una ves llenados todos los componetes podemos editar a nustro gusto todo y luego tenemos que guardar los cambios con el boton GUARDAR que en su evento OnClick pongo esto.

Código Delphi [-]
procedure TFrmAgregarProductos.SBGuardarClick(Sender: TObject);
begin
  if (MDescripcion.Text <> '') then
  begin
    with DM.ZQBusqProducto do
    begin
      Close;
      SQL.Clear;
      SQL.Add('UPDATE productos SET Descripcion = : desc, Categoria = : cat, SubCategoria = : SubCat, ');
      SQL.Add('Unidad = : Uni, Cantidad = : Cant, Proveedor = : Prov, UnidadPrecio = : UniPre, ');
      SQL.Add('PrecioCompraBs = : PCBs, PrecioCompraSus = : PCSus, Costo = : Cos, FechaActualizacion = : FA');
      SQL.Add('WHERE id_producto = : IDP');
      //Asignamos parametros a la tabla Productos
      ParamByName('desc').AsString := MDescripcion.Text;
      ParamByName('cat').AsString := DBLCBCategoria.Text;
      ParamByName('SubCat').AsString := DBLCBSubCategoria.Text;
      ParamByName('Uni').AsString := DBLCBUnidad.Text;
      ParamByName('Cant').AsString := ECantidad.Text;
      ParamByName('Prov').AsString := DBLCBProveedor.Text;
      ParamByName('UniPre').AsString := DBLCBUnidadPrecio.Text;
      ParamByName('PCBs').AsString := EPrecioCompraBs.Text;
      ParamByName('PCSus').AsString := EPrecioCompraSus.Text;
      ParamByName('Cos').AsString := ECosto.Text;
      ParamByName('FA').AsDateTime := DateTimePicker1.Date;

      ParamByName('IDP').AsInteger := idTarifa;
      ExecSQL;
    end;
    //Updateamos el código de la tabla Tarifas
    with DM.ZQBusqProducto do
    begin
      Close;
      SQL.Clear;
      SQL.Add('UPDATE tarifas SET CodigoBarra = : codBarNew, CodProducto = : CodProNew, Precio = rec1New');
      SQL.Add('WHERE id_producto = : IDP AND CodigoBarra = : codBarOld');
      SQL.Add('AND CodProducto = : codProOld AND ListaPrecio = : P1 AND precio = : prec1Old');

      ParamByName('codBarNew').AsString := ECodigoBarra.Text;
      ParamByName('codProNew').AsString := ECodProducto.Text;
      ParamByName('prec1New').AsInteger := StrToInt(EPrecio1.Text);
      ParamByName('IDP').AsInteger := idTarifa;
      ParamByName('codBarOld').AsString := codBarOld;
      ParamByName('codProOld').AsString := codProOld;
      ParamByName('P1').AsString := 'Precio1';
      ParamByName('prec1Old').AsInteger := prec1Old;
      ExecSQL;
    end;
    //Updateamos el precio1 de la tabla tarifas
    with DM.ZQBusqProducto do
    begin
      Close;
      SQL.Clear;
      SQL.Add('UPDATE tarifas SET CodigoBarra = : codBarNew, CodProducto = :CodProNew, Precio = : prec2New');
      SQL.Add('WHERE id_producto = : IDP AND CodigoBarra = : codBarOld');
      SQL.Add('AND CodProducto = : codProOld AND ListaPrecio = : P2 AND precio = : prec2Old');

      ParamByName('codBarNew').AsString := ECodigoBarra.Text;
      ParamByName('codProNew').AsString := ECodProducto.Text;
      ParamByName('prec2New').AsInteger := StrToInt(EPrecio2.Text);
      ParamByName('IDP').AsInteger := idTarifa;
      ParamByName('codBarOld').AsString := codBarOld;
      ParamByName('codProOld').AsString := codProOld;
      ParamByName('P2').AsString := 'Precio2';
      ParamByName('prec2Old').AsInteger := prec2Old;
      ExecSQL;
    end;
    //vamos por el último precio3
    with DM.ZQBusqProducto do
    begin
      Close;
      SQL.Clear;
      SQL.Add('UPDATE tarifas SET CodigoBarra = : codBarNew, CodProducto = : CodProNew, Precio = : prec3New');
      SQL.Add('WHERE id_producto = : IDP AND CodigoBarra = : codBarOld');
      SQL.Add('AND CodProducto = : codProOld AND ListaPrecio = : P3 AND precio = : prec3Old');

      ParamByName('codBarNew').AsString := ECodigoBarra.Text;
      ParamByName('codProNew').AsString := ECodProducto.Text;
      ParamByName('prec3New').AsInteger := StrToInt(EPrecio3.Text);
      ParamByName('IDP').AsInteger := idTarifa;
      ParamByName('codBarOld').AsString := codBarOld;
      ParamByName('codProOld').AsString := codProOld;
      ParamByName('P3').AsString := 'Precio3';
      ParamByName('prec3Old').AsInteger := prec3Old;
      ExecSQL;
    end;
    //Updateamos el precio4
    with DM.ZQBusqProducto do
    begin
      Close;
      SQL.Clear;
      SQL.Add('UPDATE tarifas SET CodigoBarra = : codBarNew, CodProducto = : CodProNew, Precio = : prec4New');
      SQL.Add('WHERE id_producto = : IDP AND CodigoBarra = : codBarOld');
      SQL.Add('AND CodProducto = : codProOld AND ListaPrecio = : P4 AND precio = : prec4Old');

      ParamByName('codBarNew').AsString := ECodigoBarra.Text;
      ParamByName('codProNew').AsString := ECodProducto.Text;
      ParamByName('prec4New').AsInteger := StrToInt(EPrecio4.Text);
      ParamByName('IDP').AsInteger := idTarifa;
      ParamByName('codBarOld').AsString := codBarOld;
      ParamByName('codProOld').AsString := codProOld;
      ParamByName('P4').AsString := 'Precio4';
      ParamByName('prec4Old').AsInteger := prec4Old;
      ExecSQL;
    end;
    //Updatemos el precio5
        with DM.ZQBusqProducto do
    begin
      Close;
      SQL.Clear;
      SQL.Add('UPDATE tarifas SET CodigoBarra = : codBarNew, CodProducto = : CodProNew, Precio = rec5New');
      SQL.Add('WHERE id_producto = : IDP AND CodigoBarra = : codBarOld');
      SQL.Add('AND CodProducto = : codProOld AND ListaPrecio = : P5 AND precio = : prec5Old');

      ParamByName('codBarNew').AsString := ECodigoBarra.Text;
      ParamByName('codProNew').AsString := ECodProducto.Text;
      ParamByName('prec5New').AsInteger := StrToInt(EPrecio5.Text);
      ParamByName('IDP').AsInteger := idTarifa;
      ParamByName('codBarOld').AsString := codBarOld;
      ParamByName('codProOld').AsString := codProOld;
      ParamByName('P5').AsString := 'Precio5';
      ParamByName('prec5Old').AsInteger := prec5Old;
      ExecSQL;
    end;
    //Updateamos el precio6
        with DM.ZQBusqProducto do
    begin
      Close;
      SQL.Clear;
      SQL.Add('UPDATE tarifas SET CodigoBarra = : codBarNew, CodProducto = : CodProNew, Precio = : prec6New');
      SQL.Add('WHERE id_producto = : IDP AND CodigoBarra = : codBarOld');
      SQL.Add('AND CodProducto = : codProOld AND ListaPrecio = : P6 AND precio = : prec6Old');

      ParamByName('codBarNew').AsString := ECodigoBarra.Text;
      ParamByName('codProNew').AsString := ECodProducto.Text;
      ParamByName('prec6New').AsInteger := StrToInt(EPrecio6.Text);
      ParamByName('IDP').AsInteger := idTarifa;
      ParamByName('codBarOld').AsString := codBarOld;
      ParamByName('codProOld').AsString := codProOld;
      ParamByName('P6').AsString := 'Precio6';
      ParamByName('prec6Old').AsInteger := prec6Old;
      ExecSQL;
    end;
    modoEditar(False);
    SBNuevo.Enabled := True;
    SBEditar.Enabled := True;
    SBEliminar.Enabled := True;
    SBAgregar.Enabled := False;;
    SBCancelar.Enabled := False;
    GBBusqueda.Visible := False;
    ShowMessage('Producto editado con éxito');

  end
  else
  begin
    ShowMessage('no hay datos que Editar');
  end;

end;

Ahora ya estan editados nuentros datos en las 2 tablas..

Y por último eliminar un producto con sus respectivos precios, como la estructura de las 2 tablas PRODUCTOS y TARIFAS son relacionales entonces solo bastará eliminar el producto para que así se eliminen TODOS sus precios de la tabla TARIFAS
Para que surta efecto tenemos que buscar primero el producto con el anterior código que puse de búsqueda.. e se llenan todos los componetes y esto va en el boton ELIIMINAR en el evento onclick

Código Delphi [-]
procedure TFrmAgregarProductos.SBDeleteClick(Sender: TObject);
var
  resp : Integer;
begin
resp := Application.MessageBox(Pchar('¿Desea eliminar el código '+ECodigoBarra.Text+'?'),'Eliminar un registro',MB_YESNO+MB_ICONERROR);
  if resp = ID_YES then begin
    with DM.ZQProductos do
    begin
      Close;
      SQL.Clear;
      SQL.Add('DELETE FROM productos WHERE id_producto = : IDP');
      ParamByName('IDP').AsString := DM.ZQBusqProducto.FieldByName('id_producto').AsString;
      ExecSQL;
    end;
    modoEditar(False);
    SBNuevo.Enabled := True;
    SBEditar.Enabled := True;
    SBEliminar.Enabled := True;
    SBAgregar.Enabled := False;;
    SBCancelar.Enabled := False;
    GBBusqueda.Visible := False;
  end;
end;

Los parámetros puse alejados de los 2 puntos por que me los pone como emoticons :_precioOld ahí quitan la barra baja que sería el espacio.


bueno ya terminé el fin de pegar tanta basura de código, pero como digo lo pongo por 2 cosas.. una para que pueda servirle a alguien mas ( que lo dudo ) y la otra para que puedan dar una idea mejor de hacerla
O tambien de implementar cosas como por ej a la hora de agregar un producto que si ya esta repetido el código me diga que ese código ya existe y tambien me habría gustado _mucho_ que en la busqueda sep ued abuscar con un LIKE y los resultados mostrarmelos en un DBGrid y luego el hacerle doble click "Recién" me llene los Edits, pero como veran no soy experto en delphi y trato de hacer lo mejor que puedo mis cosas..

saludos y suerte

PD ahh para que esto no quede así he echo un pequeño ejemplo de su uso, pero con 3 pequeñas tablas y una interfáz, para que todo funcione lo único que tienen que tener las componentes ZEOSlib en su última versión, aunque tambien las otras les servirá ya que uso puros querys
PD2 si el mensaje esta muuuuy largo, perdón y lo siento mucho, puedo quitarlo

PD3 tienen solo que poner el user y pass de su base de datos en el componente ZConnection

joder el adjunto se me fue en un mensaje anterior
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Actualizar Archivos Desde FTP papu24ar Varios 4 21-03-2007 03:50:57
Actualizar una base de datos desde un servidor remoto zvf MySQL 1 22-06-2006 22:21:26
Actualizar una base de datos desde un formulario federiconqn21 Varios 1 14-12-2005 16:43:23
Impresión desde un StringGrid... Lester Impresión 10 26-03-2005 07:14:29
Impresion desde un StringGrid fmonte Varios 3 17-09-2004 05:28:29


La franja horaria es GMT +2. Ahora son las 14:08:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi