delphi + sql server 2000 + ADO

delphi + sql server 2000 + ADO - SQL/NoSQL - Programmation

Marsh Posté le 31-08-2009 à 05:34:36    

bonjour;
je suis entrain de réaliser une appliacation en delphi en utilisant :
delphi7 sql server 2000   le lient avec la bese de données ce fait a l'aide de ADO (ADOConnection , ADOQuery,...).
je voudrai inseri la date dans la table escale(num_esc,numvoy,cod_nav,date_esc)
voici ma requet :  
 
procedure TForm2.BitBtn7Click(Sender: TObject);
var date1:string[10];
    date2:string[16];
begin
date1:=datetostr(DateTimePicker7.date);//renvoyer la date en string
date2:=date1[7]+date1[8]+date1[9]+date1[10]+date1[4]+date1[5]+date1[1]+date1[2];//recuperer la date sous la forme yyyymmdd(ex: 20090823)
date2:=date+' '+timetostr(DateTimePicker7.date) / ajouter l'heur a la date;
DataModule3.ADOConnection1.Connected:=true;
DataModule3.ADOQuery2.Close;
DataModule3.ADOQuery2.SQL.Clear;
DataModule3.ADOQuery2.SQL.add('INSERT escale(num_esc,num_voy,cod_nav,date_esc)values(:parnum_esc,:parnum_voy,:parcod_nav,:pardate_esc)');
DataModule3.ADOQuery2.Parameters.ParamByName('parnum_esc').Value:=edit1.Text;
DataModule3.ADOQuery2.Parameters.ParamByName('parnum_voy').Value:=edit2.Text;
DataModule3.ADOQuery2.Parameters.ParamByName('parcod_nav').Value:=DBLookupComboBox1.KeyValue;
DataModule3.ADOQuery2.Parameters.ParamByName('pardate_esc').Value:=date2;
DataModule3.ADOQuery2.Prepared:=true;
DataModule3.ADOQuery2.ExecSQL;
 
il m'afiche un message d'erreur.
 
Quelqu’un peut m'aider.
end;


Message édité par atlas56 le 04-09-2009 à 19:26:40

---------------
Il y a que le timide et le prétention qui n'apprennent pas  
Reply

Marsh Posté le 31-08-2009 à 05:34:36   

Reply

Marsh Posté le 01-09-2009 à 09:57:45    

Il t'affiche quoi comme message d'erreur déjà.

Reply

Marsh Posté le 03-09-2009 à 02:20:53    

le probleme  c'est la date . le message d'erreur affiché est comme suite :
" l'application utilise une valeur d'un type incorrecte pour l'operation en cours"
j'ai trouvé une solution mais je vouderai comprendre pour quoi la premier ecriture est fausse.
Date1:=datetostr(DateTimePicker7.date);
date2:=date1[7]+date1[8]+date1[9]+date1[10]+date1[4]+date1[5]+date1[1]+date1[2];
date2:=date2+' '+timetostr(DateTimePicker17.time);
ShowMessage(date2);
DataModule3.ADOConnection1.Connected:=true;
DataModule3.ADOQuery2.Close;
DataModule3.ADOQuery2.SQL.Clear;
DataModule3.ADOQuery2.SQL.add('INSERT escale(num_esc,num_voy,cod_nav,date_arr)values(:parnum_esc,:parnum_voy,:parcod_nav,'''+date2+''')');
DataModule3.ADOQuery2.Parameters.ParamByName('parnum_esc').Value:=edit1.Text;
DataModule3.ADOQuery2.Parameters.ParamByName('parnum_voy').Value:=edit2.Text;
DataModule3.ADOQuery2.Parameters.ParamByName('parcod_nav').Value:=DBLookupComboBox1.KeyValue;
DataModule3.ADOQuery2.Prepared:=true;
DataModule3.ADOQuery2.ExecSQL;


Message édité par atlas56 le 04-09-2009 à 19:22:24
Reply

Marsh Posté le 03-09-2009 à 02:29:30    

la date est enregistree , seulement pour quoi ça ne marche pas avec (:pardate_esc) , pour quoi faut il metre la date entre deux cotes ; la date en elle meme est une chaine de caracteres, c'est mettre une chain de caracteres entre deux cotes.
comment force sql server 2000 a accepter un format autre que le format yyyymmdd parec que je pense le probleme vien de la .


Message édité par atlas56 le 03-09-2009 à 14:46:49
Reply

Marsh Posté le 03-09-2009 à 10:34:08    

SET DATEFORMAT MYD //Change le format de date  
 
SELECT CAST('03/1987/21' AS DATETIME) //Cast au format datetime

Reply

Marsh Posté le 03-09-2009 à 14:45:20    

vous pouvez donner plus d'explication avec un exemple si c'et possible (adoquery)

Reply

Marsh Posté le 03-09-2009 à 14:48:32    

adoquery.sql.add('?????????? ');

Reply

Marsh Posté le 03-09-2009 à 14:57:09    

Essayes avec adoquery.sql.add mais c'est pas sur que ça marche.
Ce que je faisais à l'époque où je développais en Delphi pour ce genre de cas c'était de créer une storeproc SQL Server qui prenait en paramètre ce que tu passes à ta requête. Tu as un composant ADO pour les storeproc (j'ai plus le nom mais il est à coté de adoquery).  
 
La majorité de mon code SQL était directement sur SQL Server, celà permettait de corriger certains trucs sans avoir à redéployer mon application.


Message édité par antac le 03-09-2009 à 14:58:41
Reply

Marsh Posté le 03-09-2009 à 14:58:37    

vous parlez de sql server query analizer c'est ce que je fais seulement je ne sais pas comment charger les requet que je réalise vers delphi , en pluse comment faire passe les parametres  :
exemple :
 
insert into escal(num_esc,num_voy,cod_nav,date_esc)
values('09:03/001','001R',1,'20090902 15:45:00')
 
la ce n'est qu'un exemlpe , maintenan si je veux maitre a la place des valeurs des variables :
09:03/001 : var num_esc
001R : var num_voy
*
* etc
 
 
 
dans la base de données(crée avec sql server 2000, la clef:num_esc, num_voy et cod_nav c'est des clefs étrangers des tables voyage et navire respectivement)
 
type num_esc,num_voy: string(bon en sql server 200 c'est char);
       cod_nav: int


Message édité par atlas56 le 04-09-2009 à 02:16:57
Reply

Marsh Posté le 03-09-2009 à 15:00:24    

gné ?

Reply

Marsh Posté le 03-09-2009 à 15:00:24   

Reply

Marsh Posté le 03-09-2009 à 15:18:48    

oui il existe un composant ADOStoredProc (je vien de lire l'aide delphi)
TADOStoredProc encapsule une procédure stockée d'une base de données ADO

Reply

Marsh Posté le 03-09-2009 à 20:45:04    

Voilà, à partir de là tu crée une storeproc dans SQL Server avec les SET et tu appelles cette storeproc avec les paramètres que tu veux depuis Delphi

Reply

Marsh Posté le 04-09-2009 à 02:22:27    

merci pour votre aide , je vais essayé de faire ces (storeproc) en sql server 2000.

Reply

Marsh Posté le 05-09-2009 à 02:50:00    

bonjour ;
j'ai crée une simple procedure avec sql query analizer rien que pour faire un test , le probleme est :
_ d'abors ou dois-je l'enregistrer pour que le delphi  la détécte qui veux dire elle va apparaitre dans la liste procedurename de l'inspicteur d'objet ou de l'appeler avec la  oprieté :ADOStoredProc.procedureName('nom de la procedure' )
_ dans quel format dois-je enregistrer la procedure (type .sql ou .text ou.....??).
 
pouvez vous m'aider , s'il vous plait.
 
merci d'avence.


Message édité par atlas56 le 05-09-2009 à 05:51:33
Reply

Marsh Posté le 06-09-2009 à 09:57:22    

Tu n'as pas a enregistrer en quoi que ce soit ta procédure. Tu crées ta procédure stockée sous SQL Server, ta procédure sera listé dans le ADOStoredProc pour peu que tu l'as bien lier à la base de données.
 
A partir de là tu peux l'utiliser comme ça.

Reply

Marsh Posté le 07-09-2009 à 18:44:18    

bonjour;
 
j'ai arrivé a créer ma procedure select , un peté  test pour voir,  
- seulement les procedures ou sont elles stockés ? j'ai cherché dans le repertoire de sql sever 2000 dans programme file je n'ai pas trouvé de traces.
 
2- comment puis-je créer des procedures dans sql server query analizer est les stocké comme procedures.  
 
un coup de puce me serai d'une grande aide

Reply

Marsh Posté le 08-09-2009 à 08:46:58    

Comme leurs noms l'indique, ce sont des procédures stockées, ces dites procédures sont stockées dans ta base de données directement au même titre qu'une table ou qu'une vue.
 
http://barlatier.developpez.com/cs [...] kee/cours/


Message édité par antac le 08-09-2009 à 08:47:26
Reply

Marsh Posté le 10-09-2009 à 06:05:50    

bonjour;
 
merci pour votre aide je commence avoir plus clair, d'ailleur je viens de faire certaines procedures simple comme select pour mes table est ca marche.
 
salutations.

Reply

Marsh Posté le 10-09-2009 à 08:55:17    

J'en suis ravi.

Reply

Marsh Posté le 15-09-2009 à 04:12:06    

bonjour;
 
j'ai crée une table sur sql server 2000 avec une clef auto-increment , aprés avoir fais des test , j'ai supprimé les champs seulement le conteur continu de s'incrementer , comment faire pour remettre le conteur a 1.


Message édité par atlas56 le 15-09-2009 à 04:13:15
Reply

Marsh Posté le 15-09-2009 à 10:38:11    

TRUNCATE TABLE maTable;
 
Ca va tout te virer et remettre l'autoincrémentation
 
P.S.
 
Une recherche sur google t'aurait donné la solution très vite...


Message édité par antac le 15-09-2009 à 10:38:44
Reply

Marsh Posté le 16-09-2009 à 06:55:26    

Je sais, mais en ce qui concerne SQL server il y a pas grand chose est mon help de sql server est en anglais et moi je ne me débrouille pas bien en anglais.

Reply

Marsh Posté le 16-09-2009 à 11:00:10    

Pas grand chose ?
 
http://www.google.fr/#hl=fr&q=SQL+ [...] b2d1161c6d
 
Premier lien

Reply

Marsh Posté le 17-09-2009 à 06:01:17    

avec TRUNCATE TABLE ca ne marche pas!!!!!
 
j'ai trouvé une solution sur le site Microsoft TECHNet:
 
DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value ), avec la bibliotheque en français.
ca marche tres bien.
 
j'ai un probleme avec TRUNCATE TABLE :
voila j'ai 3 tables
 
table 1 avec clef1 (auto-increment)
table 2 avec clef2 (auto-increment)
 
table3 avec comme clef la concatination de (clef1+clef2) car clef1 et clef2 sont des clefs etrangers dans la table3.
 
en fesant TRUNCATE TABLE table1 ou TRUNCATE TABLE table2 dans sql server query analizer il affiche le message d'erreur suivant:
 
Cannot truncate table 'table1' because it is being referenced by a FOREIGN KEY constraint.
 
autrement dit : Ne peut pas tronquer la table 'table1', car elle est référencée par une contrainte FOREIGN KEY
 
est ce que en peut pas tronquer une table quant sa clef figure comme clef étranger dans d'autres tables??


Message édité par atlas56 le 17-09-2009 à 06:06:12
Reply

Marsh Posté le 17-09-2009 à 08:44:26    

C'est ce qu'on appelle une "contrainte d'intégrité référentielle" ;)

Reply

Marsh Posté le 18-09-2009 à 09:23:34    

antac a écrit :

C'est ce qu'on appelle une "contrainte d'intégrité référentielle" ;)


bonjour;
 
voici ma procedure:
 
CREATE PROCEDURE [dbo].[remise]  @ind int
AS
DBCC CHECKIDENT (info_scheduls, RESEED, @ind)
GO
 
est voila comment je l'appele avec le delphi7 :
 
DataModule3.ADOStoredProc1.ProcedureName:='remise';
DataModule3.ADOStoredProc1.Refresh;
DataModule3.ADOStoredProc1.Parameters.ParamByName('@ind').Value:=strtoint(Label26.Caption)-1;
DataModule3.ADOStoredProc1.ExecProc;
 
a l'exicution (Click sur un Button) il affiche le message d'erreur suivant:
 
ADOStoredProc1: impossible d'éffectuer cette opération sur un ensomble de données fermé.
 
j'ai fais un test sur SQL server query analzer ca marche :
 
Declare @ind int
set @ind=8
EXECUTE remise @ind
 
pouvez vous m'eder?
 
salutations.
 

Reply

Marsh Posté le 18-09-2009 à 09:32:16    

DataModule3.ADOConnection1.Open;
 
DataModule3.ADOStoredProc1.ProcedureName:='remise';
DataModule3.ADOStoredProc1.Refresh;
DataModule3.ADOStoredProc1.Parameters.ParamByName('@ind').Value:=strtoint(Label26.Caption)-1;
 
DataModule3.ADOStoredProc1.ExecProc;  
 
Un conseil : nomme explicitement tes composants et tes variables, tu t'en sortiras pas sinon

Reply

Marsh Posté le 18-09-2009 à 10:04:08    

ca marce pas , je ne sais pas porquoi !!!
le parametre connection dans l'inspecteur d'objet de ADOStoredProc1 recois ADOConnction1 et connected de ADOConnction1 est a true.  
 
j'ai fais une procedure  select ca marche sans meme DataModule3.ADOConnection1.Open.
 
avec adoquery ca marche mais
DataModule3.ADOQuery2.Close;
DataModule3.ADOQuery2.SQL.Clear;
DataModule3.ADOQuery2.SQL.Add('DBCC CHECKIDENT (info_scheduls, RESEED, :par_ind)');
DataModule3.ADOQuery2.Parameters.ParamByName('par_ind').Value:=strtoint(Label26.Caption)-1;
DataModule3.ADOQuery2.ExecSQL;
 
 je vouderai avance avec ces procedure si vous pouvez m'eder.
 
merci.

Reply

Marsh Posté le 19-09-2009 à 12:13:22    

bonjour;
 
(j'utilise sql server 2000 developer edition)
j'ai essayé d'autres procedures il m'afiche toujours le même message d'erreur  
ADOStoredProc1: impossible d'éffectuer cette opération sur un ensomble de données fermé.
 
voici la procedure  
 
CREATE PROCEDURE [dbo].[selection]
@ind int
AS
select  *  from info_scheduls where num_sch=@ind
GO
 
je pense qu' il y a quelque chose a confirgurer sur le sql server, de puis deux jours je chereche sans trouver de solutions.
 
je ne sais pas si vous pouvez voir d'ou vient le probleme .
 
salutations.


Message édité par atlas56 le 19-09-2009 à 12:15:04
Reply

Marsh Posté le 20-09-2009 à 01:05:07    

C'est pas coté SQL Server, c'est coté Delphi ton problème.
 
C'est pas ExecSQL que tu dois faire mais Open et lier le datasource de ton adoquery à un composant permettant de visualiser le résultat de ta requête.

Reply

Marsh Posté le 20-09-2009 à 01:42:03    

bonjour;
 
j'utilise ADOStoredProc
la  pocedure:
CREATE PROCEDURE [dbo].[selection]  
@ind int  
AS  
select  *  from info_scheduls where num_sch=@ind  
GO  
 
l'appele:
DataModule3.ADOConnection1.Open('sa','atlas');
DataModule3.ADOStoredProc1.ProcedureName:='selection';
DataModule3.ADOStoredProc1.Refresh;
DataModule3.ADOStoredProc1.Parameters.ParamByName('@ind').Value:=1;
DataModule3.ADOStoredProc1.ExecProc;
DataModule3.ADOStoredProc1.Open;
DataModule3.ADOStoredProc1.Active:=true;
 
le dataset d'un datasouce1 est lie a ADOStoredProc1.
datasource d'un DBgrid est lie a datasource1  
 
l'éxecution s'arrete a la ligne :
DataModule3.ADOStoredProc1.Parameters.ParamByName('@ind').Value:=1;
 
il affiche le mesage d'erreur suivant :
ADOStoredProc1: impossible d'éffectuer cette opération sur un ensomble de données fermé.  
 
je ne vois pas ou est le probleme !!!! je pense que le probleme vient de la configuration de sql server .
 
si vous avez une idée???
 
salutations.


Message édité par atlas56 le 20-09-2009 à 01:51:13
Reply

Marsh Posté le 20-09-2009 à 14:59:52    

DataModule3.ADOConnection1.Open('sa','atlas');
DataModule3.ADOStoredProc1.ProcedureName:='selection';
DataModule3.ADOStoredProc1.Refresh;
DataModule3.ADOStoredProc1.Parameters.ParamByName('@ind').Value:=1;
DataModule3.ADOStoredProc1.Active:=true;  
DataModule3.ADOStoredProc1.Open;


Message édité par antac le 20-09-2009 à 15:00:29
Reply

Marsh Posté le 02-01-2010 à 19:01:36    

bonjour;  
 
j'utilise ADOStoredProc  
la  pocedure:  
CREATE PROCEDURE [dbo].[selection]  
@ind int  
AS  
select  *  from info_scheduls where num_sch=@ind  
GO  
 
l'appele:  
DataModule3.ADOConnection1.Open('sa','atlas');  
DataModule3.ADOStoredProc1.ProcedureName:='selection';  
DataModule3.ADOStoredProc1.Refresh;  
DataModule3.ADOStoredProc1.Parameters.ParamByName('@ind').Value:=1;  
DataModule3.ADOStoredProc1.ExecProc;  
DataModule3.ADOStoredProc1.Open;  
DataModule3.ADOStoredProc1.Active:=true;  
 
le dataset d'un datasouce1 est lie a ADOStoredProc1.  
datasource d'un DBgrid est lie a datasource1  
 
l'éxecution s'arrete a la ligne :  
DataModule3.ADOStoredProc1.Parameters.ParamByName('@ind').Value:=1;  
 
il affiche le mesage d'erreur suivant :  
ADOStoredProc1: impossible d'éffectuer cette opération sur un ensomble de données fermé.  
 
je ne vois pas ou est le probleme !!!! je pense que le probleme vient de la configuration de sql server .  
 
si vous avez une idée???  
 
salutations.

Reply

Marsh Posté le 20-01-2010 à 09:00:13    

Enlève  
DataModule3.ADOStoredProc1.ExecProc;  

Reply

Marsh Posté le 08-03-2010 à 20:49:00    

bonjour;
ca marche avec ça:
DataModule3.ADOConnection1.Open('passe','nom_util');  
DataModule3.ADOStoredProc1.ProcedureName:='nome proc';  
DataModule3.ADOStoredProc1.close;  
DataModule3.ADOStoredProc1.open;  
DataModule3.ADOStoredProc1.Parameters.ParamByName('@ind1').Value:=edit1.text;
DataModule3.ADOStoredProc1.Parameters.ParamByName('@ind1').Value:=edit1.text;  
...............................................................................................................
DataModule3.ADOStoredProc1.Parameters.ParamByName('@ind(n)').Value:=edit(n).text;      
DataModule3.ADOStoredProc1.Active:=false;  
DataModule3.ADOStoredProc1.Active:=true;
 
salutations

Reply

Marsh Posté le 09-03-2010 à 11:30:15    

Mon Dieu que c'est moche et pas logique ce que tu as écrit...
 
DataModule3.ADOConnection1.Open('passe','nom_util');  
DataModule3.ADOStoredProc1.Active:=false;  
DataModule3.ADOStoredProc1.ProcedureName:='nome proc';  
DataModule3.ADOStoredProc1.Parameters.ParamByName('@ind1').Value:=edit1.text;  
...............................................................................................................
DataModule3.ADOStoredProc1.Parameters.ParamByName('@ind(n)').Value:=edit(n).text;      
DataModule3.ADOStoredProc1.Active:=true;

Reply

Marsh Posté le 10-03-2010 à 01:30:02    

Je ne vois pas pour quoi t’es sur la défensive, peut être parce que vous m’avez aide sur aucun des problèmes que j’ai posé, vous les français !!! si seulement vous pouvez voir a quel point vous étés hypocrites, mais ça vous voisins européens n’arrête pas de vous le dire.
Quelqu’un a dit « dieu a crée la France ensuite il a créé les français »  a dire vrai c’est les anglais qui disent ça.  

Reply

Marsh Posté le 10-03-2010 à 08:44:13    

Je ne vois pas en quoi je suis sur la défensive vu que personne ne m'a attaqué.
De plus, je ne vois aucun rapport ni sur ma nationalité ni sur la tienne.
 
Ensuite, ce n'est pas de l'hypocrisie que de dire que ton code n'a aucune logique, quand à l'extrapolation européenne... je n'en parle même pas...
 
Bref

Reply

Marsh Posté le 10-03-2010 à 09:47:51    

atlas56 a écrit :

Je ne vois pas pour quoi t’es sur la défensive, peut être parce que vous m’avez aide sur aucun des problèmes que j’ai posé, vous les français !!! si seulement vous pouvez voir a quel point vous étés hypocrites, mais ça vous voisins européens n’arrête pas de vous le dire.
Quelqu’un a dit « dieu a crée la France ensuite il a créé les français »  a dire vrai c’est les anglais qui disent ça.  


Tu peux m'expliquer ce délire relatif à la nationalité ? Qu'est ce que ça vient faire ici ?  Antac t'as juste fait remarquer que ton code était illogique et mal construit, et t'as fourni une solution plus élégante, et toi tu le traites d'hypocrite et tu délires sur la nationalité et tout... Faut arréter la fumette hein !

Reply

Marsh Posté le 11-03-2010 à 00:22:06    

Modération a écrit :


Tu peux m'expliquer ce délire relatif à la nationalité ? Qu'est ce que ça vient faire ici ?  Antac t'as juste fait remarquer que ton code était illogique et mal construit, et t'as fourni une solution plus élégante, et toi tu le traites d'hypocrite et tu délires sur la nationalité et tout... Faut arréter la fumette hein !


Allez vous faire foutre les français,  « quand à l'extrapolation européenne... je n'en parle même pas... » Vaux mieux pour toi.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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