Newsgroup: it.comp.lang.delphi
Titolo: SQL Server CE

Salve,
ho un problema davvero strano con un db SQL Server Compact Edition.
I componenti usati sono ADO (AdoConnection e AdoCommand)
Il problema � che non riesco ad eseguire una banalissima query 
parametrizzata. Il programma crasha senza sollevare eccezzioni e non riesco 
neppure a debuggare l'Execute della query.
Posto il codice di test
DM.ACmd.CommandText := 'INSERT INTO COMUNI (PROVINCIA, FRAZIONE, COMUNE, 
CAP, CF) VALUES (:prov, :fraz, :comu, :cap, :cf)';
    DM.ACmd.Parameters.ParamByName('prov').Value := 'prov';
    DM.ACmd.Parameters.ParamByName('fraz').Value := 'fraz';
    DM.ACmd.Parameters.ParamByName('comu').Value := 'com';
    DM.ACmd.Parameters.ParamByName('cap').Value := 'cap';
    DM.ACmd.Parameters.ParamByName('cf').Value := 'cf';
    DM.ACmd.Execute;
All'Execute il programma crasha e si chiude. Non riesco nemmeno a debuggare 
con un breakpoint.
La cosa strana � che se faccio la stessa insert con un solo campo 
parametrizzato, la query funziona.
Il db viene raggiunto correttamente in quanto una query  SELECT restituisce 
il dataset.
Questa comunque � la stringa di connessione
/SQL Exprs
  acSQL.ConnectionString := 'Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5; Data 
Source=' + dbpath2 + ';';//SSCE:Database Password=' + dbpassword2 + ';';
Qualche bug nella CompactEdition oppure nei componenti ADO??
Qualcuno ha avuto problemi simili?
Grazie,
Andrea

 con un breakpoint.
Non ho nessuna esperienza con MS SQL server nè sue varianti ma in 
generale si suggerisce di fare un typecast esplicito invece che passare 
un variant ai parametri di una query:
DM.ACmd.Parameters.ParamByName('prov').AsString := 'prov';
-- 
Design for the future, because it will be here sooner than you think.
(C) Eric S. Raymond, from "The Art of Unix Programming"


??
Quel metodo non esiste!!

> Quel metodo non esiste!!
Infatti.
La classe TParameter usata da ADO non ha i setter/getter tipizzati per
i parametri.
Per contro, la classe TParam usata per bde e dbx li ha.
Questo la dice molto lunga sulle diverse tecnologie ma lasciamo
perdere...
Tornando al tuo problema...!
1) La query funziona se non usi i parametri?
2) Sei certo che i nomi dei parametri siano corretti?
3) SQL CE di fatto e' un file server come firebird embedded.
Sei certo di avere i permessi giusti sul file e/o sulla cartella che
contiene il file?
4) Hai provato a dare un parseSql:
DM.ACmd.CommandText := 'INSERT INTO COMUNI (PROVINCIA, FRAZIONE,
COMUNE,
CAP, CF) VALUES (:prov, :fraz, :comu, :cap, :cf)';
***   s := DM.ACmd.CommandText; ***
***  DM.ACmd.Parameters.ParseSql(s, True); ***
    DM.ACmd.Parameters.ParamByName('prov').Value := 'prov';
    DM.ACmd.Parameters.ParamByName('fraz').Value := 'fraz';
    DM.ACmd.Parameters.ParamByName('comu').Value := 'com';
    DM.ACmd.Parameters.ParamByName('cap').Value := 'cap';
    DM.ACmd.Parameters.ParamByName('cf').Value := 'cf';
    DM.ACmd.Execute;
5) Dici che vai in crash. Lo fai solo a runtime, solo a designtime o
sempre? Nel registro degli eventi non c'e' scritto niente di utile?
6) Hai provato a creare un datasource ODBC che punti al db e quindi
passare tramite odbc e non direttamente via ADO?
7) Se crei un ODBC potresti fare un tenativo con bde o dbx...Se va, il
problema e' ADO, altrimenti sai che a monte ci sta qualcosa che non
va..
Domanda scema: perche' proprio SQL ce??
Ci ho pianto sopra quando feci una app in vs2005+cf2.0 per palmari.
In ambito professionale, l' astronomica quantita' di  parolacce e
bestemmie che ho lanciato lavorando con queste cose e' stata raggiunta
guarda caso solo ai tempi che lavoravo con la prima versione di vb6...
A.


Abbiamo un vecchio applicativo che si appoggia su access. C'è la necessità 
di migrare a qualcosa di meglio restando però sul fileserver come tipologia 
di db. Per non dover stravolgere troppo le query abbiamo pensato di provare 
con la compact edition continuando ad utilizzare ADO, ma già i test sono un 
disastro.
Comincio a pensare che ci sia un bug nel driver per SQLServer CE, non ho 
provato con ODBC.
Perchè l'insert di un solo campo parametrizzato funziona?? Se ne metto due o 
più va in crash
Grazie,
Andrea 

 disastro.
SQL CE e' una di quelle cose da usare se VERAMENTE non hai delle
alternative.
Cioe' se sei su palmari e non hai soldi per prendere un db per palmari
che funziona: sybase.
A.