delphi + sql server 2000 + ADO - SQL/NoSQL - Programmation
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;
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 .
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
Marsh Posté le 03-09-2009 à 14:45:20
vous pouvez donner plus d'explication avec un exemple si c'et possible (adoquery)
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.
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
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
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
Marsh Posté le 04-09-2009 à 02:22:27
merci pour votre aide , je vais essayé de faire ces (storeproc) en sql server 2000.
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.
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.
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
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/
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.
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.
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...
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.
Marsh Posté le 16-09-2009 à 11:00:10
Pas grand chose ?
http://www.google.fr/#hl=fr&q=SQL+ [...] b2d1161c6d
Premier lien
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??
Marsh Posté le 17-09-2009 à 08:44:26
ReplyMarsh 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.
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
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, ar_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.
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.
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.
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.
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;
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.
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
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;
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.
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
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. |
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 !
Marsh Posté le 11-03-2010 à 00:22:06
Modération a écrit : |
Allez vous faire foutre les français, « quand à l'extrapolation européenne... je n'en parle même pas... » Vaux mieux pour toi.
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