Newsgroup: it.comp.appl.access
Titolo: qery di creazione tabella

Se cerco di creare una tabella tramite SQL
CREATE TABLE Articoli(
NroArt CHAR(4) PRIMARY KEY,
Descrizione CHAR(20),
Giacenza DECIMAL(4,0),
Categoria CHAR(2),
PrezzoUnitario DECIMAL(6,2)
);
mi da errore nel tipo DECIMAL, cosa posso fare?

 ha scritto nel messaggio
news:eTwTa.8177$Za4.2...@news2.tin.it...

Ciao Francesco
Il tipo di dato Decimal(x,y) è diconosciuto da ADODB e non da JET quindi
devi eseguire la tua stringa sql da una connessione ADO che per il db
corrente è
--------------
CurrentProject.Connection.Execute TuaStrSql
--------------
Se lo esegui da CurrendDb.execute TuaStrSql non puoi utilizzare il tipo di
dato Decimal(x,y)
Cuai Giorgio

 ha scritto nel messaggio
news:bfm6du$8kg$1...@lacerta.tiscalinet.it...

invece che DECIMAL cosa posso utilizzare che sia riconosciuto da Microsoft
Jet e sia conforme ad ANSI 89

 ha scritto nel messaggio

non sono ferrato perche' non uso mai queste sintassi, ma decimal non e' un
tipo di dati propriamente detto, ma un sottotipo del tipo numerico (se provi
numeric al posto di decimal vedi che ti funziona.
Se e come specificare il sottotipo decimal oltre che numeric non saprei.
Sib

 ha scritto nel messaggio
news:L8xTa.8337$Za4.2...@news2.tin.it...

Ciao Francesco
Forse mi sono spiegato male, puoi utilizzare tranquillamente il tipo di dato
Decimal anche con Jet 3.6. Il problema è che non lo puoi creare  con un
comando Sql (CREATE TABLE ecc).
Comunque un tipo di dato preciso come decimal è CYRRENCY ma ha  4 decimali
fissi e viene formattato da Access con il  simbolo della valuta inserito nel
pannello di controllo.
Ciao Giorgio.

"Sib" <si...@SPAMiol.it> ha scritto nel messaggio
news:SfxTa.5481$Df5.1...@news1.tin.it...

Ciao Sib
Numeric e Decimal sono la stessa cosa se intesi come tipo di dato per un
campo di una tabella, altra cosa è il sottotipo Decimal delle variabili VBA
Variant.
Nel caso di un comando Sql di creazione tabella Decimal e Numeric generano
lo stesso errore se il comando è eseguito da CurrentDb.Execute ......
Ciao Giorgio

Data la tua buona preparazione sull'argomento ti disturberò ancora e ti
chiedo di scusarmi se sono così incompetente ma è da ieri che ho iniziato a
studiare l'sql con access, il problema è che ho l'esame di base di dati e va
fatto in access e SQL,
io ho access 2002 e se eseguo la query di creazione sotto ANSI-92 va tutto
bene mentre se viene eseguita sotto ANSI-89 da errore.
In laboratorio ci sarà una versione sicuramente più vecchia (non ricordo se
Access 2000 o Access 97) e quindi non dovrebbe supportare ANSI-92, quindi mi
chiedo:
Come posso fare per creare tale tabella usando solo Access?
Ti chiedo ancora scusa per il disturbo e ti ringrazio per l'aiuto che mi
stai dando!

 > > > Se cerco di creare una tabella tramite SQL
E poi che problema c'è a eseguirlo con
CurrentProject.Connection.Execute TuaStrSql ?
Il db non di destinazione non è il Db corrente ?
Allora apri una connessione ado e esegui il tuo comando.
--------------------
Sub CreaTb()
   Dim Cn as Object
   Dim TuaStringaSql as String
    TuaStringaSql="CREATE TABLE ecc ecc usando DECIMAL(x,y) o NUMERIC(x,y))"
  Set Cn = CreateObject("ADODB.Connection")
  Cn.ConnectionString = _
    "Provider=Microsoft.Jet.OLEDB.4.0;" & _
   "User ID=Admin;Data Source=C:\Documenti\TuoDatabase.mdb"
 Cn.Open
 Cn.execute TuaStringaSql
 Cn.close
 Set Cn=Nothing
End Sub
--------------------------
Ciao Giorgio

 lo stesso errore se il comando č eseguito da CurrentDb.Execute ......
Io ho provato ad eseguire la query direttamente dalla finestra sql del
generatore di query e con numeric funziona.
Inoltre se guardi la truttura delle tabelle si vede come il tipo e' numeric
mentre la definizione decimale lo trovi nella proprieta' dimensione del
campo.
Anche nell'help in linea e' specificato che il tipo base e' numeric mentre
tutti i sottotipi (single, double, decimal, ecc) sono definiti come
dimensione campo.
Sib

 ha scritto nel messaggio
news:OyxTa.5565$Df5.1...@news1.tin.it...

Ciao Francesco
In Access2000 puoi utilizzare CurrentProject.Connection.Execute, in Access97
no.
In Access97 devi utilizzare un tipo di dato diverso da Decimal, potresti
usare Double, è un campo a virgola mobile e come tale impreciso con i
decimali, ma si riesce a lavorarci bene se in fase di calcolo si eseguono
gli arrotondamenti alla cifra decimale desiderata.
Nella tua stringa Sql ho visto che al campo Giacenza hai assegnato
Decimal(4,0) in questo caso potresti usare LONG che non ha decimali.
Quindi il tuo comando Sql potrebbe diventare
------------------------------
CREATE TABLE Articoli(
NroArt CHAR(4) PRIMARY KEY,
Descrizione CHAR(20),
Giacenza LONG,
Categoria CHAR(2),
PrezzoUnitario CURRENCY
);
Oppure utilizzando il tipo di dato a virgola mobile
-------------------------------
CREATE TABLE Articoli(
NroArt CHAR(4) PRIMARY KEY,
Descrizione CHAR(20),
Giacenza DOUBLE,
Categoria CHAR(2),
PrezzoUnitario CURRENCY
);
Non tenere conto del mio post precedente, pensavo fosse un problema pratico
e non teorico.
Ciao Giorgio

 dimensione campo.
Queste sono pure nomenclature di access o di chi ha tradotto l'help  e
spesso confondono le idee, non esiste un sottotipo single o double o decimal
di numerico, il form è stato fatto in quel modo per comodità grafica.
I tipi di dato sono
DECIMAL(x,y) o NUMERIC(x,Y)
DOUBLE o FLOAT
SINGLE o REAL
LONG o INT
BIT o Sì/no
ecc. ecc.
Da BOL
------------------------
decimal e numeric
Tipo di dati numerici con precisione e scala fisse.
decimal[(p[, s])] e numeric[(p[, s])]
Numeri con precisione e scala fisse. Quando di utilizza la precisione
massima, i valori validi sono compresi tra - 10^38 +1 e 10^38 - 1. I
sinonimi di SQL-92 per il tipo di dati decimal sono dec e dec(p, s).
--------------------
Ciao Giorgio.

 di numerico, il form è stato fatto in quel modo per comodità grafica.
cut
Hai ragione, comunque la query di creazione tabella con "Numeric" funziona.
Resta da capire cosa bisogna usare per definire i decimal.
Sib

"Sib" <si...@SPAMiol.it> ha scritto nel messaggio
news:cjCUa.18789$Df5.5...@news1.tin.it...

Per definire un campo decimal si usa DECIMAL(x,y)  oppure  NUMERIC(x,y)
oppure dec(x,y)
Ciao Giorgio

 oppure dec(x,y)
Mi e' chiaro,
ma access non accetta nessuna di queste sintassi.
mentre numeric la accetta serenamente.
Sib

"Sib" <si...@SPAMiol.it> ha scritto nel messaggio
news:CK3Va.22258$Df5.6...@news1.tin.it...

Ciao Sib
Cra una nuova Query e inserisci questa stringa Sql
---------------------------------
CREATE TABLE Prova (
Id_Rec INT IDENTITY (1,1),
Numero1 Decimal(28,2),
Numero2 Numeric(28,2),
Numero3 Dec(28,2))
--------------------------------
vedrai che l'accetta serenamente.
Ciao Giorgio.

 vedrai che l'accetta serenamente.
Ciao Giorgio,
forse tu tiriferisci a un adp, perche' come mdb non accetta nemmeno queli
tipo di dichiarazione identity, oltre a dare errore su decimal, dec e sulla
paarentesi dopo numeric.
Siv

"Sib" <si...@SPAMiol.it> ha scritto nel messaggio
news:Ek5Va.22565$Df5.6...@news1.tin.it...

Ciao Sib
La stringa Sql è conforme all'Ansi92  e dal menu Strumenti-->Opzioni quindi
scheda Tabelle/Query devi mettere il check su Sintassi compatibile SqlServer
(Ansi92).
Senza questo check a me NUMERIC(x,y) DECIMAL(x,y), DEC(x,y), IDENTITY non
funzionano.
Se vuoi ti mando un MDB di esempio con memorizzata la query di creazione
tabella.
Se anche in questo caso non ti funziona comincio a pensare che i nostri
computer ragionano in modo diverso (come per le sp con i progetti ADP).
Ciao Giorgio.

 computer ragionano in modo diverso (come per le sp con i progetti ADP).
Capisco,
c'e' solo un piccolo problema, da me (in questa macchina A2000) nella scheda
Tabelle/Query della finestra opzioni non c'e' traccia della opzione ANSI92,
ma proprio nulla che ci si avvicini.
Che versione di access hai?
Ciao
Sib

"Sib" <si...@SPAMiol.it> ha scritto nel messaggio
news:sm7Va.23081$Df5.6...@news1.tin.it...

Ciao Sib
Ho AccessXp, comincio a capire molte cose sulle differenze tra le rispettive
esperienze.
Prova questa sub in un MDB
-------------------------------
Sub CreaTb()
Dim strSql As String
strSql = "CREATE TABLE Prova (" & _
         "Id_Rec INT IDENTITY (1,1)," & _
         "Numero1 Decimal(28,2)," & _
         "Numero2 Numeric(28,2)," & _
         "Numero3 Dec(28,2))"
CurrentProject.Connection.Execute strSql
End Sub
----------------------------------
dovrebbe funzionare.
A proposito di differenze e tornando a SqlServer, che versione di MSDE usi
per i progetti ADP ?
Prova a creare una sp e all'interno inserisci  SELECT @@VERSION
Io per programmare  uso questa versione
--------------------------------------------------------
Microsoft SQL Server  2000 - 8.00.760 (Intel X86)
 Dec 17 2002 14:22:05
 Copyright (c) 1988-2003 Microsoft Corporation
 Personal Edition on Windows 4.10 (Build 2222:  A )
--------------------------------------------------------
e ai clienti distribuisco questa
--------------------------------------------------------
Microsoft SQL Server  2000 - 8.00.760 (Intel X86)
 Dec 17 2002 14:22:05
 Copyright (c) 1988-2003 Microsoft Corporation
 Desktop Engine on Windows 4.10 (Build 2222:  A )
--------------------------------------------------------
Ciao Giorgio.

 Prova a creare una sp e all'interno inserisci  SELECT @@VERSION
Per quanto riguarda l'aggiornabilita' di sp e view, ho provato sia su:
------------------------------------------------
Microsoft SQL Server  2000 - 8.00.194 (Intel X86)
 Aug  6 2000 00:57:48
 Copyright (c) 1988-2000 Microsoft Corporation
 Desktop Engine on Windows 4.90 (Build 3000:  )
--------------(Mia versione)-----------------
sia su:
------------------------------------------------
Microsoft SQL Server  7.00 - 7.00.623 (Intel X86)
 Nov 27 1998 22:20:07
 Copyright (c) 1988-1998 Microsoft Corporation
 MSDE on Windows NT 5.1 (Build 2600: Service Pack 1)
-----------(Versione cliente)-----------------
Su entrambe il comportamento e' identico.
Sib

"Sib" <si...@SPAMiol.it> ha scritto nel messaggio
news:Bp9Va.23556$Df5.6...@news1.tin.it...

Certamente,  Decimal Numeric e Dec sono la stessa cosa e in Access sarebbe
stato inutile averli tutti, in SqlServer li hanno tenuti distinti per
compatibilità con vecchie versioni.
Ciao Giorgio.