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 02-05-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por roman
A todo esto, ¿has examinado la propiedad CanModify del Query una vez abierto?

// Saludos
En el evento AfterOpen del Query puse esto

Código Delphi [-]
  
procedure TForm1.Query1AfterOpen(DataSet: TDataSet);
begin
  If Query1.CanModify = true then begin
     ShowMessage('Can Modify es True');
  end
  else ShowMessage('Can Modify es False');
end;

Y si, me pone CanModify en True.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #22  
Antiguo 02-05-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Je, je, hola egostar. En realidad le preguntaba a mjjj. No es que te quiera hacer el feo pero ya veo que a ti te funciona correctamente

// Saludos
Responder Con Cita
  #23  
Antiguo 02-05-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Ah bueno, solo que sea por eso......

Pues bien, que valga el post para que haga la prueba y te conteste.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #24  
Antiguo 02-05-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Para mi sigue radicando en el uso de un solo query:
Cita:
select * from load.db where prensa = 'NA'
Este muestra los valores en el dbgrid segun nuestro amigo mjjj, pero no explica que sentencia usa en la ejecucion del otro query, para mi que debe borrar en la tabla, si trata de borrar con la primera sentencia por mas RequestLive en true le dira que no puede actualizar, por que esta haciendo un filtro, (quien sabe de que datos), sin envargo con dos query se ve la diferencia, es mas yo lo haria con tres asi:
primer query1, selecciono toda la tabla:
Código Delphi [-]
Query1.Close;
Query1.sql.text:= 'select * from load.db';
Query1.open;
Segundo query3, Filtro para el dbgrid:
Código Delphi [-]
Query2.Close;
Query2.sql.text:= 'select * from load.db where prensa = 'NA'';
Query2.open;
Tercer query3, borro o lo que quiera:
Código Delphi [-]
Query3.Close;
Query3.sql.text:= 'Delete * from load.db where prensa = '+Query1prensa.AsString;;
Query3.open;// si se quieren valores de regreso
Query3.ExecSQL;// si nada mas se quiere actualizar
Puede ser que me equivoque, es mas como novato es muy probable, pero cosas como esta ya he hecho y funcionan.
Saludos
Responder Con Cita
  #25  
Antiguo 02-05-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Caral
Hola

Para mi sigue radicando en el uso de un solo query:

Este muestra los valores en el dbgrid segun nuestro amigo mjjj, pero no explica que sentencia usa en la ejecucion del otro query, para mi que debe borrar en la tabla, si trata de borrar con la primera sentencia por mas RequestLive en true le dira que no puede actualizar, por que esta haciendo un filtro, (quien sabe de que datos), sin envargo con dos query se ve la diferencia, es mas yo lo haria con tres.......
Pues no amigo Caral, si se puede hacer con un solo query, de hecho lo estoy haciendo yo, mi consulta es esta.

Código SQL [-]
select * from llamadaH
where prefijo = '00'

Pero bueno, esperemos que que nuestro amigo mjjj nos responda.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #26  
Antiguo 02-05-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola egostar
No me digas no, asi nada mas, suena muy mal, me estas poniendo mal parado entre mis admiradores.
La verdad, se puede de muchas formas, de eso estoy seguro, pero si haces una tabla con pocos campos los que te convengan y haces una prueba, seguro que te sale bien, ya que conoces como y donde metistes los datos de los campos etc.
Cuando hacen por aqui una pregunta tan dificil, y por que dificil, porque se desconoce practicamente todo, pues uno supone de mas.
Maestro, definitivamente estoy aprendiendo.
Saludos
Responder Con Cita
  #27  
Antiguo 02-05-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Caral
Hola egostar
No me digas no, asi nada mas, suena muy mal, me estas poniendo mal parado entre mis admiradores.
La verdad, se puede de muchas formas, de eso estoy seguro, pero si haces una tabla con pocos campos los que te convengan y haces una prueba, seguro que te sale bien, ya que conoces como y donde metistes los datos de los campos etc.
Cuando hacen por aqui una pregunta tan dificil, y por que dificil, porque se desconoce practicamente todo, pues uno supone de mas.
Maestro, definitivamente estoy aprendiendo.
Saludos
,

Bueno, si te parece bien lo pongo de esta manera.

Amigo Caral, yo si pude hacerlo con un solo query......

Vamos, que te invito un buen trago en la Taberna para enmendar mi error

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #28  
Antiguo 02-05-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Ves que bien he vuelto a ser respetado en mi grupo de admiradores.
Vamos, pero esta ronda la invito yo.
Saludos Maestro.
Responder Con Cita
  #29  
Antiguo 11-05-2007
snowlis snowlis is offline
Miembro
 
Registrado: nov 2006
Posts: 30
Poder: 0
snowlis Va por buen camino
He probado con el requestlive y todo lo que decis y funciona pero con un pero.

Solo funciona si el dbgrid coge los datos de una consulta en la que solo lees datos de una tabla.

El problema viene si intentas modificar los registros de un dbgrid que coge el resultado de una query en la que utilizas varias tablas.

Ahí ya no te deja modificar nada, en cambio si son datos solo de una tabla no hay problema.

Hay solución para esto ?
Responder Con Cita
  #30  
Antiguo 11-05-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por snowlis
Hay solución para esto ?
Desde luego. Para esos casos más complejos es que se usa el objeto UpdateSQL, ya mencionado en este hilo. Básicamente, en ese objeto especificas las sentencias SQL necesarias para modificar, borrar o insertar un registro.

// Saludos
Responder Con Cita
  #31  
Antiguo 11-05-2007
snowlis snowlis is offline
Miembro
 
Registrado: nov 2006
Posts: 30
Poder: 0
snowlis Va por buen camino
Puedes especificar un poco más o ponerme un código de ejemplo para que vea como sería.

Por ejemplo si mostraras en un dbgrid una consulta de este tipo :

select campo1,campo2,campo3,campo4 from tabla1,tabla2 where campo1=edit1.text

Una vez te sale la consulta en el dbgrid, como harías para que te dejará modificar cualquier registro del resultado y se quedará guardado ?
Responder Con Cita
  #32  
Antiguo 11-05-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Para empezar, difícilmente pondría una consulta así pues no hay ninguna condición que relacione ambas tablas.

Ahora, debes tener en claro qué es lo que quieres hacer. Porque al decir que quieres modificar un registro y guardarlo puede parecer obvio cuál es el objetivo, pero, ¿un registro de dónde? Los datos provienen de dos (o más) tablas y sólamente puedes hacer un UPDATE, DELETE o INSERT de una de ellas.

Vamos a ver un ejemplo concreto. Tengo tablas de alumnos, grupos y las inscripciones de los primeros en los segundos:

alumno = (id, nombre)
grupo = (id, clave, salon, creditos)
inscripcion = (alumno_id, grupo_id, calificacion)

Para presentar una lista de los alumnos de un grupo dado, a fin de que el maestro pueda asentar calificaciones, uso esta consulta SQL

Código SQL [-]
select alumno.id, grupo.id, alumno.nombre, inscripcion.calificacion
from alumno
left join alumno on alumno.id = inscripcion.alumno_id
where inscripcion.grupo_id = :grupo_id
order by alumno.nombre

En este caso, me interesa poder actualizar el campo calificacion, es decir, quiero actualizar la tabla de inscripciones.

Puedes entonce usar la propiedad ModifySQL de un objeto UpdateSQL conectado a tu Query, poniendo la siguiente sentencia:

Código SQL [-]
update inscripcion
set calificacion = :calificacion
where
  alumno_id = :OLD_alumno_id and
  grupo_id = :OLD_grupo_id

En esta consulta hay tres parámetros: calificacion, OLD_alumno_id y OLD_grupo_id.

Si esta fuese una consulta independiente, tendríamos que sustituir el parámetro calificación antes de ejecutar la consulta, y asímismo proporcionar los valores de los otros parámetros para indicar cuál es el registro que deseamos modificar.

El mecanismo de los objetos UpdateSQL nos facilitan esto, rellenando en automático los parámetros que coincidan con nombres de campos en la consulta SELECT (calificacion en este caso), proveyendo los valores que vengan del control de edición. Y otro lado, hacen uso de parámetros especiales OLD_, que contienen los valores de los campos indicados, tal y como venían de la consulta SELECT. En el ejemplo, OLD_alumno_id y OLD_grupo_id serán llenados en automático, por los valores de los campos alumno_id y grupo_id que originalmente venían con los datos.

Esto quiere decir entonces, que tu consulta SELECT debe necesariamente incluir los campos necesarios para identificar al registro que se va a modificar (o borrar en el caso de DeleteSQL), aun y cuando tales campos no los muestres al usuario.

// Saludos
Responder Con Cita
  #33  
Antiguo 13-05-2007
snowlis snowlis is offline
Miembro
 
Registrado: nov 2006
Posts: 30
Poder: 0
snowlis Va por buen camino
Ok, ahora lo tengo un poquito más claro, pero lo he probado y no funciona.
La consulta sql que yo muestro en el dbgrid exactamente es la siguiente :

Código SQL [-]
Select CONCEPTO,DESCR,UNID,PRECI,BONIF FROM MAEVALO1 INNER JOIN MAEDSCR1 ON MAEVALO1.CONCEPTO=MAEDSCR1.CLAVE WHERE MAEVALO1.OBRA="'+edit1.Text+'"

Lo que quiero es que cualquier regilla del dbgrid una vez que se muestre la consulta sea modificable y que al insertar un nuevo valor este se quede guardado.

He conectado un objeto updatesql a la query y he probado con la propiedad modify tal y como dice roman, pero no consigo que me funcione.

Podrías decirme cual es la consulta que tendría que poner en la propiedad modify para que pudiera editarlo todo ?
Responder Con Cita
  #34  
Antiguo 14-05-2007
Pedro-Juan Pedro-Juan is offline
Miembro
 
Registrado: ago 2006
Ubicación: Barcelona - España
Posts: 315
Poder: 18
Pedro-Juan Va por buen camino
Question Posible solución

Hola a tod@s

Por el comentario que ha hecho mjjj, "pero al hacer un nueva busqueda este vuelve a aparecer", deduzco que lo que quiere es eliminarlo definitivamente, o sea, eliminarlo de la tabla.
Yo he hecho algo parecido a esto en mis aplicaciones, espero que te ayude:
Código Delphi [-]
var cVarCampo: String; //puede ser cualquier otro tipo que esté indexado
 
//El el evento OnClick del button
cVarCampo := Query.FieldByName('cCampo').AsString;
if (TABLE do Locate(cCampo',cVarCampo,[])) then
with TABLE do Delete;
else
ShowMessage('Aviso','No cuela');

Un saludo
__________________
Este mundo es el camino para el otro, que es morada sin cesar. Mas cumple tener buen tino para andar esta jornada sin errar. (J. Manrique)

Última edición por Pedro-Juan fecha: 14-05-2007 a las 23:41:18.
Responder Con Cita
  #35  
Antiguo 06-07-2007
Avatar de Alejandrina
Alejandrina Alejandrina is offline
Miembro
 
Registrado: mar 2007
Ubicación: Medellin
Posts: 46
Poder: 0
Alejandrina Va por buen camino
Question Modificar Columna TDBGRid

Hola a todos...
Creo que estoy intentando hacer algo similar, pero estoy confundida. Tengo un TDBGrid asociado a un Query, y quisiera modificar solo la columna de prioridad utilizo la propiedad ReadOnly pero igual no me deja modificar...Que puedo hacer?
__________________
Alejandrina
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
error al borrar un registro noshy SQL 1 12-05-2006 20:13:07
Borrar lineas detalle al borrar registro maestro akinom38 Conexión con bases de datos 3 11-01-2006 10:38:07
borrar registro desde un query fabian20s Conexión con bases de datos 2 25-03-2005 13:48:50
Borrar e Insertar un registro de una tabla con Query Draco Conexión con bases de datos 4 06-05-2004 17:27:37
Borrar registro .mdb con ADO Masu Conexión con bases de datos 3 23-02-2004 19:16:10


La franja horaria es GMT +2. Ahora son las 01:50:42.


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