Delphi - REVISEN ESTA CONSULTA

 
Vista:

REVISEN ESTA CONSULTA

Publicado por ANTONIO (16 intervenciones) el 05/08/2002 19:53:29
QUERY1.SQL.ADD('UPDATE MARCA SET MAR_DESCRIPCION='+ EDIT1.TEXT);
QUERY1.OPEN;
ME DA UN ERROR CUANDO LA EJECUTO POR FAVOR ALGUIEN ME PUEDE CORREGIR
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:REVISEN ESTA CONSULTA

Publicado por PonchoWare (27 intervenciones) el 05/08/2002 23:21:16
El metodo Open solo se utiliza en consultas que devuelven registros como un SELECT, para el UPDATE cierrala primero con Close y usa el metodo ExecSQL, aunque al parecer tambien en la asignacion del nuevo valor la estas regando, si el atributo es de tipo char entonces debes poner mas apostrofes quedaria mas o menos asi...

instruccionSQL = 'UPDATE MARCA SET MAR_DESCRIPCION=''' + Edit1.Text + '''';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(instruccionSQL);
Query1.ExecSQL;

instruccionSQL debe ser de tipo string es mejor asi por que asi puedes debuggear mejor, primero son tres apostrofes y despues 4. Creo que ademas te falta por ai un WHERE...

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

RE:REVISEN ESTA CONSULTA

Publicado por mamcx (533 intervenciones) el 06/08/2002 01:48:04
Tambien puedes usar la funcion QutoStr() para que agrege los apostrofes y no se complique la lectura del sql.

O puedes usar la funcion format, y crear una constante con la cadena. P ej:

Const_Sql='UPDATE MARCA SET MAR_DESCRIPCION=%S';

y luego

Query1.SQL.Add(Format(Const_Sql,[QuoteStr(Edit1.Text])

Sin embargo esto es un mecanismo MUY problematico y que genera muchos errores. Una solucion mejor es crear un pseudo-generador de sql (o buscar uno por ahi), al cual le pases la informacion y te retorne la cadena SQL bien hecha (lo que ayudaria a evitar errores de sintaxis)

Por ejemplo:

TGeneradorSql
Function GetSelect(Tabla:String;Campos:String;Order:String;Filtro:String)

Como para que te hagas a la idea... Eventualmente seria bueno hacer algo como:

oUpdateSql=TUpdateSql.Create;

oUpdateSql.Tabla='MARCA'
oUpDateSql.Add('MAR_DESCRIPTION',Edit1.Text,adFldChar);
oUpdateSql.Filtros.Add('IdMarca','=','1')

Query1.SQL.Add(oUpdateSql.GetSql())

Se ve como mas codigo pero realmente es una manera muy flexible y eficiente de generar cadenas SQL bien hechas y con minimos errores...Imaginate por ejemplo pasar un DataSet y que las clase solita arme los distintos sql :)


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