hola a todos , espero me puedan ayudar tengo datos que voy agregando a un stringgrid desde un dbgrid temporalmente antes de ir a una tabla (delphi 7+ access), lo que necesito hacer y no he podido es que el stringgrid no permita datos duplicados y al detectarlo eliminar la fila (o moverla al final y eliminarla), gracias de antemano si me pueden ayudar
No permitir datos duplicados en una columna stringgrid
#1
Escrito 18 junio 2020 - 10:34
#2
Escrito 19 junio 2020 - 08:33
hola a todos , espero me puedan ayudar tengo datos que voy agregando a un stringgrid desde un dbgrid temporalmente antes de ir a una tabla (delphi 7+ access), lo que necesito hacer y no he podido es que el stringgrid no permita datos duplicados y al detectarlo eliminar la fila (o moverla al final y eliminarla), gracias de antemano si me pueden ayudar
Hola rafaeim, bienvenido a DelphiAccess
¿Podrías ser mas específico en tu requerimiento?
Si nos muestras un ejemplo de lo que estás haciendo sería más fácil ayudarte.
Saludos
#3
Escrito 19 junio 2020 - 12:23
hola gracias por responder , si voy a tratar de explicarme un poco mejor subi una imagen para que lo veas a nivel visual , es una aplicacion de ventas , tengo un dbgrid que lo alimenta una tabla productos , con evento "onclickcell" busco en la tabla apatir del id del producto y los voy agregando linea por linea en el stringgrid con un conjunto if-else el problema es que con la condcion que le aplico al if (que la existencia - la cantidad en el stringgrid no sea >= 0 ) valida esa linea pero agrega en la siguiente por eso se me ocurrio que no permitiera celdas duplicadas en el stringrid https://subefotos.co...37631b9b44o.jpg
procedure TfrmMain.dgProductoCellClick(Column: TColumn); var i:double; x:double; a:integer; begin a:=1; buscarcod(dgproducto.SelectedField.AsString, Encontrado); if Encontrado and not(DM.tblProducto.fieldbyname('Existencia').Asinteger = 0) then if(StringGrid1.Cells[2, 1] = '') then begin StringGrid1.Cells[0, 1]:=DM.tblProducto.fieldbyname('Producto').AsString; StringGrid1.Cells[2, 1]:=DM.tblProducto.fieldbyname('Precio').AsString; StringGrid1.Cells[1, 1]:=DM.tblProducto.fieldbyname('Existencia').AsString; StringGrid1.Cells[6, 1]:=DM.tblProducto.fieldbyname('tipo').AsString; i:=((DM.tblProducto.fieldbyname('precio').asfloat)*(strtofloat(maskedit1.Text))); x:= ceil(i); StringGrid1.Cells[3, 1]:=(FormatFloat('0.000',(roundc ((x))))); StringGrid1.Cells[4, 1]:= inttostr(1); StringGrid1.Cells[5, 1]:=DM.tblProducto.fieldbyname('Id').AsString; StringGrid1.Cells[7, 1]:=inttostr(1); sumadolares; sumabs ; end else if(StringGrid1.Cells[2, 1] <> '') and (StringGrid1.Cells[0, 1]=DM.tblProducto.fieldbyname('Producto').AsString) and (((dm.tblProducto.FieldByName('existencia').Asinteger-1) - strtoint(frmMain.StringGrid1.Cells[4, 1])) >= 0 ) then begin StringGrid1.Cells[4, 1]:=inttostr (strtoint(StringGrid1.Cells[4, 1])+1); sumadolares; sumabs ; end else
Hola rafaeim, bienvenido a DelphiAccess
¿Podrías ser mas específico en tu requerimiento?
Si nos muestras un ejemplo de lo que estás haciendo sería más fácil ayudarte.
Saludos
#4
Escrito 03 diciembre 2021 - 08:57
hola a todos , espero me puedan ayudar tengo datos que voy agregando a un stringgrid desde un dbgrid temporalmente antes de ir a una tabla (delphi 7+ access), lo que necesito hacer y no he podido es que el stringgrid no permita datos duplicados y al detectarlo eliminar la fila (o moverla al final y eliminarla), gracias de antemano si me pueden ayudar
Pues viendo tu tema, y haber si te estoy entendiendo bien ; pues te recomendaría 2 Opciones:
Opcion 1: Que en tu Dataset( ideal seria un Query), ya tengas los datos correctos, es decir no repetidos. .
Averigua la clausula "DISTINCT" en sentencias SQL. .
Opcion2: Que te hagas una Funcion (Function) que tenga como parámetro de entrada un string y la columna; dicha función recorrería dicha columna en tu StringGrid y te verificaría si dicho string se encuentra en alguna celda de la determinada columna de los datos de dicho StringGrid, si es el caso no copias esa fila del dataSet a tu StringGrid:
Revisa y elije cual de estas dos opciones se adapta mejor a tu necesidad.
Espero te sirva. Saludos..