PDA

Ver la Versión Completa : actualizar 1 campo quitando un guion


pmtzg
11-02-2012, 21:34:56
hola amigos solocito su consejo en lo siguiente:

tengo una tabla deseo hacer un cambio por ejemplo:

hay un campo llamado cve_art

digamos que son las siguientes claves :

001
001-1
020
020-1
060
060-1
090
090-1
1000
1000-1
900000
900000-1

etc ....




los guiones que tienen estas claves representan un obsequio
pero si deseo contabilizar el total mi idea es quitarle los guiones para sumarlos todos

en pocas palabras trabajere siempre con un respaldo y deseo quitar guiones de la tabla

aqui se necesito hacer un recorrido de la tabla de principio a fin y checando que claves
tienen guion para removerselo

si se puede hacer esto con el dataset???
esto es lo que estoy haciendo y no me queda:
dm1: datamodule
fibdset: dataset fibplus

uso firebird 2.5, delphi 2007



dm1.FIBDset1.Close;
dm1.FIBDset1.Database := dm1.FIBData1;
dm1.FIBDset1.Transaction := dm1.FIBTran1;
dm1.AbreBd; // aqui abro mi base de datos
dm1.FIBDset1.SQLs.SelectSQL.Text:='Select * from '+nomtable;
dm1.FIBDset1.Open; // abro el dataset
dm1.FIBDset1.SQLs.UpdateSQL.Text:='Update '+nomtable+
' set '+
' cve_art = :cve_art';



g2.Visible :=true;
g2.MinValue :=0;
g2.MaxValue := dm1.FIBDset1.RecordCount;
label1.Caption := inttostr(dm1.FIBDset1.RecordCount);
dm1.FIBDset1.First;
while not dm1.FIBDset1.Eof do
begin
for K := 1 to dm1.FIBDset1.Fields.Count - 1 do
begin
xcve_art :=dm1.FIBDset1.FieldByName('cve_art').AsString;
if StrScan (Pansichar(xcve_art),'-') <> nil then
begin

pos := ansipos('-',xcve_art); //checa en donde esta el guion ebn numero de posicion de la cadena
xcve_art := copy(xcve_art,1, pos-1); // aqui lo corto
dm1.FIBDset1.QUpdate.Params[0].Value := xcve_art;
end;
end; {end for }
dm1.FIBDset1.QUpdate.ExecQuery;
DM1.FIBDset1.Next;
g2.Progress :=dm1.FIBDset1.RecNo;
end; {end while}
dm1.FIBTran1.Commit;
g2.Visible := false;


y no me arranca que estoy haciendo mal
gracias

Caral
11-02-2012, 22:03:04
Hola
No me parece necesario borrar el contenido de la tabla para quitar los guiones.
Yo lo que haria seria usar la funcion StringReplace.
Este es un ejemplo:
var
res : string;
begin
res := StringReplace(Edit1.Text, '-1', ' ',[rfReplaceAll, rfIgnoreCase]);
Edit2.Text:= res;

Simplemente haz un recorrido de la tabla y ve quitandole el guion, eso si, solo para sumar el dato, no borrarlo.
Saludos

pmtzg
11-02-2012, 23:49:33
gracias caral

pero eso no es mi problema

mi problema es que no actualiza los campo
no recorre la tabla

y no se si mi codigo es correcto


ese es mi problema

grcias

Caral
12-02-2012, 16:41:37
Hola
Bueno:
Si no actualiza la tabla y no la recorre, tu codigo no es correcto.
Obviamente.
Saludos

RONPABLO
12-02-2012, 22:25:13
que tal hacer esto? si necesidad de alterar la tabla


select
sum(cast(
case position('-',cve_art)
when 0 then cve_art
else substring(cve_art from 1 for position('-',cve_art)-1)
end as double precision))
from nombreTabla

ecfisa
13-02-2012, 01:06:07
Si deseas quitar el caracter '-' del campo CVE_ART, podrías hacer:

UPDATE TABLA
SET CVE_ART = IIF( POSITION('-',CVE_ART) > 0,
SUBSTRING( CVE_ART FROM 1 FOR POSITION('-',CVE_ART)-1 ) ||
SUBSTRING( CVE_ART FROM POSITION('-',CVE_ART) + 1 FOR CHAR_LENGTH(CVE_ART) ),
CVE_ART )


Saludos.

iceboxpro
14-05-2012, 17:55:44
umm, no se a que te refieres con reemplazar en la tabla, pero tienes que leer el registro habilitarlo para edicion y luego guardarlo con un POST.

Ejemplo.


Table1.First;
while not Table1.EOF do
with Table1 do
begin
Edit;
NomCampo := ReplaceStr(NomCampo,Lo que quiero cambiar,por lo que lo quiero cambiar,[rfReplaceAll]);
post;
next;
end;
end;

Ojo, esto reemplaza y guarda todo cambio realizado a los campos, recomiendo que haga unas pruebas con dos o tres recorridos y veas si es lo que necesitas.

Estamos para ayudarte.

Saludos desde Mexico

Casimiro Notevi
14-05-2012, 18:27:38
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)

El código de ecfisa hace exactamente eso, quita los guiones.
El código de ronpablo hace el cálculo que requiere el usuario manteniendo los guiones.
:)

pmtzg
16-05-2012, 04:05:24
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)

El código de ecfisa hace exactamente eso, quita los guiones.
El código de ronpablo hace el cálculo que requiere el usuario manteniendo los guiones.
:)

gracias mi estimado casimiro
los ejemplos que ustedes me han dado me han servido de mucho