Table Access Liée à SQL Server par ODBC

Table Access Liée à SQL Server par ODBC - SQL/NoSQL - Programmation

Marsh Posté le 17-03-2006 à 14:06:41    

Bonjour,
 
J'avais une application qui tournait correctement sous Access, et j''ai voulu lier certaines tables dans SQL Server.
 
Le problème étant que lorsque j'affectais une valeur à un champ (non clé primaire), avec Access, ma clé primaire était générée automatiquement et je la récupérait automatiquement aussi : (mon code Access)
 

Code :
  1. Private Sub Form_Current()
  2. '// Me!Project_ID est la clé primaire autoincrémentée dans access
  3. If IsNull(Me!Project_ID) Then
  4. '// on donne la valeur " " au champ Project_Prefix ce qui insere un enregistrement et donne la valeur incrémentée pour Project_ID
  5. Me!Project_Prefix = " "
  6.   DoCmd.Save
  7. End If
  8. End Sub


 
Le Problème est que avec la table liée à SQL Server, l'incrément ne se fait pas à l'affectation de " " à un des champ de ma table, le Me!Project_ID reste à null (alors qu'il passait automatiquement à sa valeur incrémentée dans Access) et lorsque je passe à l'enregistrement de mes données de table, j'ai une erreur 94 "invalid use of null".
 
Si quelqu'un à une idée de l'origine du problème ?
Ou du code qui permettrait de mettre à jour la table, ou le recordset, cela fait 2 jours que cherche, je n'ai toujours rien trouvé.
 
Merci


Message édité par katopex le 17-03-2006 à 14:58:55
Reply

Marsh Posté le 17-03-2006 à 14:06:41   

Reply

Marsh Posté le 23-03-2006 à 13:16:24    

En fait j'ai réussi à récupérer automatiquement l'ID mais pas au même moment, il semblerait que l'update de la table ne se fasse qu'après un BeforeUpdate dans SQL Server (alors que c'est instantané avec Access).
 
Je m'explique :
 
Après ce code :
 

Code :
  1. Private Sub Form_Current()
  2. '// Me!Project_ID est la clé primaire autoincrémentée dans access
  3. If IsNull(Me!Project_ID) Then
  4. '// on donne la valeur " " au champ Project_Prefix ce qui insere un enregistrement et donne la valeur incrémentée pour Project_ID
  5. Me!Project_Prefix = " "
  6.   DoCmd.Save
  7. End If
  8. End Sub


 
Je passais dans la fonction :
 

Code :
  1. Private Sub Form_BeforeUpdate(Cancel As Integer)
  2. Call find_changes("Project Details edited", Me.Project_ID, 0, 0, Me)
  3. End Sub


 
 
Et là, la fonction find_changes plantait à cause de Me.Project_ID à null.
 
Or si (j'enlève la fonction find_changes) et je remplace par :
 

Code :
  1. Private Sub Form_BeforeUpdate(Cancel As Integer)
  2. End Sub


 
Là, mon ID est récupéré, la table a bien été mise à jour, et je peut lancer la fonction find_changes dans le Form_AfterUpdate.
 

Code :
  1. Private Sub Form_AfterUpdate()
  2. Call find_changes("Project Details edited", Me.Project_ID, 0, 0, Me)   ' que j'ai donc déplacé dans mon code
  3. Forms!main!cmbProject.Requery
  4. End Sub


 
 
Je suppose que cela vient du fonction de SQL Server, ou ODBC, mais j'aurai souhaiter récupérer l'auto-incrément plus tôt, si vous avez une idée !!!
 
Merci encore

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed