Ir al contenido


Foto

Asignando sentencias SQL para modificar en IBDataSet


  • Por favor identifícate para responder
13 respuestas en este tema

#1 nilsemsolano

nilsemsolano

    Member

  • Miembros
  • PipPip
  • 14 mensajes

Escrito 28 febrero 2014 - 12:17

Hola,
Estoy trabajando con un IBDataSet y no se si puedo asignarle esto, sera que se puede.

begin
Case equipo of
  rojo:
  ibdtst.ModifySQL.Add('update torneo set,');
  ibdtst.ModifySQL.Add('clave=:clave,');
  ibdtst.ModifySQL.Add('juego_zona_uno=:juego_zona_uno,');
  ibdtst.ModifySQL.Add('where clave=clave,');
  verde:
  ibdtst.ModifySQL.Add('update torneo set,');
  ibdtst.ModifySQL.Add('clave=:clave,');
  ibdtst.ModifySQL.Add('juego_zona_dos=:juego_zona_dos,');
  ibdtst.ModifySQL.Add('where clave=clave,');
  azul:
  ibdtst.ModifySQL.Add('update torneo set,');
  ibdtst.ModifySQL.Add('clave=:clave,');
  ibdtst.ModifySQL.Add('juego_zona_tres=:juego_zona_tres,');
  ibdtst.ModifySQL.Add('where clave=clave,');
  else
  ShowMessage('Equipo no esta inscrito!');
  end;
end;
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 28 febrero 2014 - 12:52

Te falta la agrupación por bloques ( ^o| No sé si eso se entiende :D :D :D mejor lo hago gráfico)



delphi
  1. begin
  2. Case equipo of
  3.   rojo: begin
  4.           ibdtst.ModifySQL.Add('update torneo set,');
  5.           ibdtst.ModifySQL.Add('clave=:clave,');
  6.           ibdtst.ModifySQL.Add('juego_zona_uno=:juego_zona_uno,');
  7.           ibdtst.ModifySQL.Add('where clave=clave,');
  8.   end;
  9.   verde: begin
  10.           ibdtst.ModifySQL.Add('update torneo set,');
  11.           ibdtst.ModifySQL.Add('clave=:clave,');
  12.           ibdtst.ModifySQL.Add('juego_zona_dos=:juego_zona_dos,');
  13.           ibdtst.ModifySQL.Add('where clave=clave,');
  14.   end;
  15.   azul: begin
  16.           ibdtst.ModifySQL.Add('update torneo set,');
  17.           ibdtst.ModifySQL.Add('clave=:clave,');
  18.           ibdtst.ModifySQL.Add('juego_zona_tres=:juego_zona_tres,');
  19.           ibdtst.ModifySQL.Add('where clave=clave,');
  20.   end;
  21.   else
  22.   ShowMessage('Equipo no esta inscrito!');
  23.   end;
  24. end;




  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 28 febrero 2014 - 01:14

Aunque ya entrados en gastos, vamos a acortar un poco el código.



delphi
  1. var
  2.   filtro: string;
  3. begin
  4.   case equipo of
  5.     rojo : filtro := 'juego_zona_uno=:juego_zona_uno,';
  6.     verde: filtro := 'juego_zona_dos=:juego_zona_dos,';
  7.     azul : filtro := 'juego_zona_tres=:juego_zona_tres,';
  8.     else  ShowMessage('Equipo no esta inscrito!');
  9.   end;
  10.   ibdtst.ModifySQL.Clear;
  11.   ibdtst.ModifySQL.Add('update torneo set,');
  12.   ibdtst.ModifySQL.Add('clave=:clave,');
  13.   ibdtst.ModifySQL.Add(filtro);
  14.   ibdtst.ModifySQL.Add('where clave=clave,');
  15. end;


  • 0

#4 nilsemsolano

nilsemsolano

    Member

  • Miembros
  • PipPip
  • 14 mensajes

Escrito 28 febrero 2014 - 03:03

Ok,

Muchas gracias, ahora si mejorare mi codigo.

te agradezco mucho.
  • 0

#5 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 28 febrero 2014 - 04:12

Solo una pequeña aclaración, para que ese código te funcione, las variables Equipo, Rojo, Verde, Azul deberían ser de tipo ordinal (entero, char, boolean) , en caso de que estas sean de tipo string puedes valerte de  la siguiente función de ZArko:



delphi
  1. function StringToCaseSelect
  2.   (Selector : string;
  3. CaseList: array of string): Integer;
  4. var cnt: integer;
  5. begin
  6.   Result:=-1;
  7.   for cnt:=0 to Length(CaseList)-1 do
  8. begin
  9.     if CompareText(Selector, CaseList[cnt]) = 0 then
  10.     begin
  11.       Result:=cnt;
  12.       Break;
  13.     end;
  14.   end;
  15. end



y en tu código quedaría así:



delphi
  1. var
  2.   filtro: string;
  3. begin
  4. case StringToCaseSelect(Equipo,
  5.       [Rojo,Verde,Azul]) of
  6.     rojo : filtro := 'juego_zona_uno=:juego_zona_uno,';
  7.     verde: filtro := 'juego_zona_dos=:juego_zona_dos,';
  8.     azul : filtro := 'juego_zona_tres=:juego_zona_tres,';
  9.     else
  10.       begin   
  11.       ShowMessage('Equipo no esta inscrito!');
  12.       Exit;
  13.       end;
  14.   end;
  15.   ibdtst.ModifySQL.Clear;
  16.   ibdtst.ModifySQL.Add('update torneo set,');
  17.   ibdtst.ModifySQL.Add('clave=:clave,');
  18.   ibdtst.ModifySQL.Add(filtro);
  19.   ibdtst.ModifySQL.Add('where clave=clave,');
  20. end;



Además he agregado la línea Exit en caso de que el equipo no esté inscrito.

Saludos.

  • 0

#6 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 28 febrero 2014 - 04:45

Pero en todo caso habría que modificar también el case no amigo Wilson ???



delphi
  1. function StringToCaseSelect
  2.   (Selector : string;
  3. CaseList: array of string): Integer;
  4. var cnt: integer;
  5. begin
  6.   Result:=-1;
  7.   for cnt:=0 to Length(CaseList)-1 do
  8. begin
  9.     if CompareText(Selector, CaseList[cnt]) = 0 then
  10.     begin
  11.       Result:=cnt;
  12.       Break;
  13.     end;
  14.   end;
  15. end





delphi
  1. var
  2.   filtro: string;
  3. begin
  4. case StringToCaseSelect(Equipo,
  5.       [Rojo,Verde,Azul]) of  // Se cambian los valores del CASE
  6.     0 : filtro := 'juego_zona_uno=:juego_zona_uno,';
  7.     1:  filtro := 'juego_zona_dos=:juego_zona_dos,';
  8.     2 : filtro := 'juego_zona_tres=:juego_zona_tres,';
  9.     else
  10.       begin   
  11.       ShowMessage('Equipo no esta inscrito!');
  12.       Exit;
  13.       end;
  14.   end;
  15.   ibdtst.ModifySQL.Clear;
  16.   ibdtst.ModifySQL.Add('update torneo set,');
  17.   ibdtst.ModifySQL.Add('clave=:clave,');
  18.   ibdtst.ModifySQL.Add(filtro);
  19.   ibdtst.ModifySQL.Add('where clave=clave,');
  20. end;




Saludox ! :)

  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 28 febrero 2014 - 04:53

Solo una pequeña aclaración, para que ese código te funcione, las variables Equipo, Rojo, Verde, Azul deberían ser de tipo ordinal (entero, char, boolean) , en caso de que estas sean de tipo string puedes valerte de  la siguiente función de ZArko:


:) Tiene usted toda la razón amigo Wilson, pero asumí (mal hecho de mi parte) que rojo, verde y azul, eran variables ordinales y no cadenas  *-)

Saludos
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 28 febrero 2014 - 04:55

Pero en todo caso habría que modificar también el case no amigo Wilson ??


¡Hay caramba!, en un rato regreso con otro método mucho mejor  :p  :D :D :D

Saludos
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 28 febrero 2014 - 05:02

A ver que tal



delphi
  1. var
  2.   filtro: string;
  3. begin
  4.   case AnsiIndexStr(equipo ,['rojo', 'verde', 'azul']) of
  5.     0: filtro := 'juego_zona_uno=:juego_zona_uno,';
  6.     1: filtro := 'juego_zona_dos=:juego_zona_dos,';
  7.     2: filtro := 'juego_zona_tres=:juego_zona_tres,';
  8.     else begin
  9.           ShowMessage('Equipo no esta inscrito!');
  10.           exit;
  11.     end;
  12.   end;
  13.   ibdtst.ModifySQL.Clear;
  14.   ibdtst.ModifySQL.Add('update torneo set,');
  15.   ibdtst.ModifySQL.Add('clave=:clave,');
  16.   ibdtst.ModifySQL.Add(filtro);
  17.   ibdtst.ModifySQL.Add('where clave=clave,');
  18. end;



Saludos
  • 0

#10 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 28 febrero 2014 - 05:12

Pero en todo caso habría que modificar también el case no amigo Wilson ???


Tienes toda la razón mi estimada Fena.

Saludos.
  • 0

#11 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 28 febrero 2014 - 05:18

A ver que tal



delphi
  1. var
  2.   filtro: string;
  3. begin
  4.   case AnsiIndexStr(equipo ,['rojo', 'verde', 'azul']) of
  5.     0: filtro := 'juego_zona_uno=:juego_zona_uno,';
  6.     1: filtro := 'juego_zona_dos=:juego_zona_dos,';
  7.     2: filtro := 'juego_zona_tres=:juego_zona_tres,';
  8.     else begin
  9.           ShowMessage('Equipo no esta inscrito!');
  10.           exit;
  11.     end;
  12.   end;
  13.   ibdtst.ModifySQL.Clear;
  14.   ibdtst.ModifySQL.Add('update torneo set,');
  15.   ibdtst.ModifySQL.Add('clave=:clave,');
  16.   ibdtst.ModifySQL.Add(filtro);
  17.   ibdtst.ModifySQL.Add('where clave=clave,');
  18. end;



Saludos


Ahora si quedó de novela.

Saludos.

PD: Solo falta que venga el doliente y diga que las variables si eran ordinales.  :D :D :D
  • 0

#12 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 28 febrero 2014 - 05:23

A ver que tal



delphi
  1. var
  2.   filtro: string;
  3. begin
  4.   case AnsiIndexStr(equipo ,['rojo', 'verde', 'azul']) of
  5.     0: filtro := 'juego_zona_uno=:juego_zona_uno,';
  6.     1: filtro := 'juego_zona_dos=:juego_zona_dos,';
  7.     2: filtro := 'juego_zona_tres=:juego_zona_tres,';
  8.     else begin
  9.           ShowMessage('Equipo no esta inscrito!');
  10.           exit;
  11.     end;
  12.   end;
  13.   ibdtst.ModifySQL.Clear;
  14.   ibdtst.ModifySQL.Add('update torneo set,');
  15.   ibdtst.ModifySQL.Add('clave=:clave,');
  16.   ibdtst.ModifySQL.Add(filtro);
  17.   ibdtst.ModifySQL.Add('where clave=clave,');
  18. end;



Saludos


Acabo de encontrar un detalle en el código.  :D :D :D  hay que quitar las  comillas a las variables Rojo, Verde, Azul.

Saludos.
  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 28 febrero 2014 - 05:51

Acabo de encontrar un detalle en el código.  :D :D :D  hay que quitar las  comillas a las variables Rojo, Verde, Azul.



Claro, siempre y cuando esas sean variables conteniendo 'rojo, 'verde' y 'azul', en todo caso habrá que hacer una ligera prueba :D :D :D

Saludos

PF, Y si resulta que en realidad fueran ordinales :D :D :D  8o| *-)
  • 0

#14 nilsemsolano

nilsemsolano

    Member

  • Miembros
  • PipPip
  • 14 mensajes

Escrito 28 febrero 2014 - 11:02

No hay de que preocuparse, ya entendi todo y ejecute el codigo y me esta funcionando de maravilla.

Gracias, mejor que tener un profesor en casa....
  • 0




IP.Board spam blocked by CleanTalk.