cbg1964
Messages postés3Date d'inscriptionjeudi 13 août 2009StatutMembreDernière intervention19 août 2009
-
13 août 2009 à 13:42
cbg1964
Messages postés3Date d'inscriptionjeudi 13 août 2009StatutMembreDernière intervention19 août 2009
-
19 août 2009 à 10:47
Bonjour à tous,
Je galère depuis plusieurs heures pour trouver comment
J'ai 2 tables DBF (dBase IV) de même structure Table1.dbf et Table2.dbf.
Je veux regarder dans Table1.dbf si je trouve le champ Code avec la valeur 'VALEUR1'.
Si je ne le trouve pas, alors j'ajoute à Table1.dbf l'enregistrement de Table2.dbf dont le champ Code à la valeur 'VALEUR1'
A priori rien de bien sorcier, et pourtant...
Je ne trouve pas de doc bien faite pour manipuler une table DBF avec ADO (je ne veux pas utiliser BDE qui n'est pas toujours installé);
Sans me faire mon programme, pouvez-vous me dire svp où je peux trouver de la doc ou des exemples (composants à ajouter, paramètres car je m'y perd avec les TDAOTable, TDAOQuery ou autre TDAOCommand...) pour Ouvrir une table DBF, rechercher des enregistrements, mettre à jour des valeurs, ajouter des enregistrements et en supprimer. Enfin, des choses qui devraient être simples...
SI HLitRecherche("EW112SC","PS_KODE",gsCode) ALORS
SI PAS HLitRecherche("EW112CL","PS_KODE",gsCode) ALORS
HCopieEnreg("EW112CL", "EW112SC", hValDéfaut)
HAjoute("EW112CL")
FIN
{"CL.PS_DIREC"}=gsCheminCL+""+gsCode
{"CL.PS_DIRGRF"}=gsCheminCL+"\GRF"
SI {"CL.PS_PROFIEL"}="3" ALORS
{"CL.PS_DIRSKD"}=gsCheminCL+"\SKD\Alu"
SINON
{"CL.PS_DIRSKD"}=gsCheminCL+"\SKD\CORO"
FIN
HModifie("EW112CL")
FIN
CODE DELPHI
program UpdEW_112;
{$APPTYPE CONSOLE}
uses
SysUtils,classes,ADODB;
var
EW112SC_Cn:TADOConnection;
EW112CL_Cn:TADOConnection;
with EW112SC_T do
begin
Connection:=EW112SC_Cn;
TableName:='ew_112sc';
Active:=true;
end;
with EW112CL_T do
begin
Connection:=EW112CL_Cn;
TableName:='ew_112';
Active:=true;
end;
EW112SC_T.Open;
EW112CL_T.Open;
if EW112SC_T.Locate('PS_KODE',gsCode,[]) then
begin
if not EW112CL_T.Locate('PS_KODE',gsCode,[]) then
begin
EW112CL_T.Append;
for I := 0 to EW112CL_T.FieldCount - 1
do EW112CL_T.Fields[I].Value := EW112SC_T.Fields[I].Value;
EW112CL_T.Post;
end;
EW112CL_T.Edit;
EW112CL_T.FieldByName('PS_DIREC').Value:=gsCheminCL+'\'+gsCode;
EW112CL_T.FieldByName('PS_DIRGRF').Value:=gsCheminCL+'\GRF';
if EW112CL_T.FieldByName('PS_PROFIEL').Value='3'
then EW112CL_T.FieldByName('PS_DIRSKD').Value:=gsCheminCL+'\SKD\Alu'
else EW112CL_T.FieldByName('PS_DIRSKD').Value:=gsCheminCL+'\SKD\CORO';
EW112CL_T.Post;
end;
EW112SC_T.Close;
EW112CL_T.Close;
EW112SC_Cn.Free;
EW112CL_Cn.Free;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 14 août 2009 à 15:08
tu peux raisonner autrement :
tu ajoutes systèmatiquement l'enregistrement de la table2 qui a pour valeur VALEUR1 dans la table1 et s'il y est déjà, tu ne fais rien.
procedure TForm1.Button7Click(Sender: TObject);
begin
ADOQUERY1.Open;
ADOQUERY2.Open;
if ADOQUERY2.Locate('Code', VALEUR1, []) then
if not ADOQuery1.Locate('Code', VALEUR1, []) then
begin
ADOQUERY1.append;
ADOQUERY1CODE.Value := ????
ADOQUERY1.post;
end;
end;
end;
cbg1964
Messages postés3Date d'inscriptionjeudi 13 août 2009StatutMembreDernière intervention19 août 2009 19 août 2009 à 10:47
Désolé pour le retard à répondre (je suis en vacances ;))
Pour la méthode je pense comprendre, mais comment déclarer ADOQuery? Dois-je utiliser un TADOConnection ou directement indiquer dans ADOQuery.ConnectionString ma chaîne de connexion? Où indiquer mon nom de fichier dbf ?
Petite précision, il s'agit d'une application console avec composants créés dynamiquement.