PDA

Ver la Versión Completa : Problemas al generar una clave unica


Huer
08-06-2004, 21:56:09
Hola Amigos delphianos.

He avanzado ya bastante gracias a esta ayuda.
mi consulta es la siguiente

tengo una tabla en SQL 2000, en un servidor y la conexión la realizo a través de Ado todo hasta aqui todo bien.

pero quiero generar una clave unica con los valores de dos campos, ambos numeric 13.

pero el problema esta cuando los grabos lo hace con un valor totalmente diferente al real, el codigo que ejecuto es el siguiente:


procedure TFoInscrip.CEditCuentaKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key = Vk_return then
begin
if dmm.ADOTOrdenPago.Locate('cuentaordenpago',CeditCuenta.Text, []) then
begin
Bplanillaexiste := True;
CeditOrden.Text := dmm.ADOTOrdenPago.fieldBYname ('ORDENPAGO').AsString;
DeditIngreso.Text:= dmm.ADOTOrdenPago.fieldBYname('FECHAORDEN').AsString;
MkRut.Text := dmm.ADOTOrdenPago.fielDByname('RutProveedores').AsString;
if dmm.ADOTProveedores.Locate('rutproveedores',MkRut.Text,[]) then
begin
MkRut.Text := dmm.ADOTProveedores.fieldbyName('RutProveedores').AsString;
EditNombreProv.Text:= dmm.ADOTProveedores.fieldbyName('empresa').AsString;
end;
end;
ShowMessage('No existe cuenta');
CEditOrden.SetFocus;
end;

end;

Gracias por leer y ayuda en ejecucion de este proyecto...
salu2

delphi.com.ar
08-06-2004, 22:10:09
pero el problema esta cuando los grabos lo hace con un valor totalmente diferente al real¿Qué quieres decir con esto? ¿No guarda los valores que tu le pasas?
Por otro lado, el código que nos muestra parece parte del proceso de búsqueda...
Como extra, utilizar las etiquetas [delphi] para mostrar el código de una forma mas amena.

Saludos!

Huer
08-06-2004, 22:42:13
Lo que quiero decir es lo siguiente:

existen dos campos edit1 lo que ingreso es : 13300012998 en el segundo edit2 ingreso ambos por teclado : 1523 y la clave que tiene que generarse es la 133000129981523, mientras que los ultimos numeros se agregen al numero anterior y esto lo trato de realizar tomando el edit1 lo multiplico por 10000 y luego le sumo el edit2. pero me graba y todo pero el mumero no es el correcto por ejemplo -1485935123 o 18458210322 nada que ver con el valor correcto. y el codigo que ingreso esta más arriba.
gracias por responder

delphi.com.ar
08-06-2004, 22:47:26
Sigo sin entender cual es al relación con el código anterior. ¿Cuál es el tipo de dato del campo dónde deseas guardar esta clave?

Huer
08-06-2004, 23:03:58
var clavet : integer;
begin
clavet := 10000;

CEditpaso.Value := (Clavet+CEditCuenta.Value); dmm.ADOTOrdenPago.Append;
dmm.ADOTOrdenPago.FieldByName('CUENTAOR').Value := CEditpaso.Value;
dmm.ADOTOrdenPago.FieldByName('CUENTA').Value:= CEditCuenta.Text;
dmm.ADOTOrdenPago.FieldByName('ORDENP').AsInteger:= n.AsInteger;
dmm.ADOTOrdenPago.FieldByName('FECHA').AsString:=DEditIngreso.Text;
dmm.ADOTOrdenPago.FieldByName('rutproveedores').Value := MkRut.Text;
dmm.ADOTOrdenPago.Post;



Lo siento este era el codigo correcto

en donde dice cuantaor debo grabar el numero 133000129981523
y en cuenta el valor de 1523
y los otros no tengo problemas
pero en el cuentaor me graba cualquier cosa memos el numero

Mick
09-06-2004, 02:04:45
Lo siento pero casi no se entiende lo que quieres decir,
por el tipo de problema parece que estas trabajando con numeros demasiado
grandes.
Un integer es de 32 bits, de modo que 2 elevado 32 da: 4294967296 valores diferentes. Como los enteros son con signo, se puede guardar un valor entre -2 mil millones y +2 mil millones mas o menos.
El numero que estás manipulando se pasa de esos valores.

Saludos
Miguel

delphi.com.ar
09-06-2004, 02:58:57
Insisto en que no se te entiende, con respecto a lo que dice Mick, hay tipos numéricos desde Delphi el Int64, que soportan sin problemas los números que intentas usar, pero viendo que no necesitas verdaderamente hacer ninguna operación aritmética, yo te recomendaría manejarlos como string.

Saludos!