Newsgroup: it.comp.lang.delphi
Titolo: Firebird

Ciao ho due problemoni..
Sto usando delphi 8 .net e firebird 1.5.
1) select tb.codice from (select * from Archivio) tb
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, char 19.
select.
Cosa sbaglio? O firebird/Interbase non permette i select from select?
2) Molto molto molto grave...
Il server è impostato in Italiano, quindi i numeri sono nel formato 
1.000,00. Ora quando salvo nel db cancello i punti e sostituisco le 
virgole con i punti. Funziona alla grande se esamino il db il valore è 
es:43,00. Usando un DataGrid e caricando i valori mi viene visualizzato  
4300 (prob interpreta la virgola come sep delle migliaia).. qualcuno può 
salvarmi la vita?
--- posted by geoForum on 
http://www.delphiedintorni.it

 salvarmi la vita?
Secondo me se fai le scritture via Delpi utilizzando oggetti query con i
parametri (se programmi con i componenti VCL.Net) risolvi ogni problema...
	Query1.Close;
	Query1.ParamByName('valorefolat').AsFloat := 43.5;
	Query1.ExecSQL;
Di piů, non so.
Saluti
	Marco Bortolani
	info @ 
marcobortolani.it

 2) Molto molto molto grave...
[cut]
Posta il codice che usi per scrivere i dati sul db.
AS

 vero non l'ho mai nemmeno provato)
Oracle lo permette...
Saimon

> Oracle lo permette...
Oracle? Si fa prima a dire cosa *non permette*....
I manuali OCA si chiamano cosi xche, quando li leggi, ti viene la pelle 
d'"oca" a pensare "..zzo, hanno pensato anche a questo!" ;)
AS

Posta il codice che usi per scrivere i dati sul db.
        ID := NewID('ARCHIVIO_MOVIMENTI', 'ID_MOVIMENTO');
        SQL := 'INSERT INTO ARCHIVIO_MOVIMENTI ' +
        '(ID_MOVIMENTO, CAUSALE, DESCRIZIONE, DATA, ' +
         'ID_CLI_FOR, ID_ARTICOLO, ID_UTENTE, ' +
         'QUANTITA, PREZZO, TIPO, PERCENTUALE_SCONTO, ' +
         'IMPORTO_SCONTO, IVA)' +
        ' VALUES ' +
        '(' + ID + ', ' +
              QS(txtMotive.Text, True) + ', ' +
              QS(txtDescription.Text, True) + ', ' +
              QD(txtDate.Text, True) + ', ' +
              idSubjects + ', ' +
              idAtricles + ', ' +
              idUsers + ', ' +
              QN(txtQuantity.Text, True) + ', ' +
              QN(txtPrice.Text, True) + ', ' +
              idType + ', ' +
              QN(txtPercRed.Text, True) + ', ' +
              QN(txtReduction.Text, True) + ', ' +
              QN(txtIVA.Text, True) + ')';
      Command := FbCommand.Create(SQL, Conn);
      Command.ExecuteNonQuery;
dove QN è 
function QN(value: String; mode: Boolean = False): String;
begin
  value := Trim(value);
  value := StringReplace(value, '.', '', [rfReplaceAll]);
  value := StringReplace(value, ',', '.', [rfReplaceAll]);
  if value = '' then begin
    if not mode then
      Result := ' IS NULL'
    else
      Result := 'NULL';
  end else
    if not mode then
      Result := '=' + value
    else
      Result := value;
end;


Paroca wrote:
crea una query parametrica con il seguente sql:
INSERT INTO ARCHIVIO_MOVIMENTI(
ID_MOVIMENTO, CAUSALE, DESCRIZIONE, DATA, ID_CLI_FOR, ID_ARTICOLO, 
ID_UTENTE, QUANTITA, PREZZO, TIPO, PERCENTUALE_SCONTO, 
IMPORTO_SCONTO, IVA) values(
:ID_MOVIMENTO, :CAUSALE, :DESCRIZIONE, :DATA, :ID_CLI_FOR, :ID_ARTICOLO, 
:ID_UTENTE, :QUANTITA, :PREZZO, :TIPO, :PERCENTUALE_SCONTO);
Poi:
q.paramByName('Id_Utente').Value = Id;
q.paramByName('Causale').Value :=  QS(txtMotive.Text, True);
..
q.execute;
A

vero non l'ho mai nemmeno provato)
Oracle, MSSql, MySql, Paradox e ho appena provato con access lo fanno!
Quindi mi sembrava strano che IB non lo facesse.
Ah.. naturalmente la query č un po piů complessa di come lo scritta nel 
post.. č che mi serve filtrarla in fasi successive e mi serviva proprio 
il select from select.


>crea una query parametrica con il seguente sql:
Intanto grazie mille.. Oggi provo!


 il select from select.
Scusa ma ho appena provato
	select 
tb.name
 from (select * from animals) tb
su DBDEMOS (Paradox) e mi sono beccato un bel 
	Invalid use of keyword
	Token: select
	Line Number: 1
Invece la
	select tb.country from (select * from COUNTRY) tb
su IBLocal (Interbase 6) non va uguale...
	Invalid use of keyword
	Token: select
	Line Number: 1
Ho usato il Database Explorer di Delphi 7... 
	Marco
	info @ 
marcobortolani.it
P.S.
Con Access invece va

 vero non l'ho mai nemmeno provato)
Non è vero, le subquery sono supportate da quasi tutti i motori di db, con
l'eccezione di MySQL che però si sta adeguando.
Ho provato al volo questa su Access "SELECT Nome, Cognome, Indirizzo FROM
(SELECT * FROM Turisti)" e come sapevo funziona.

Dopo aver dato una rapida scorsa al manuale Firebird, ho in effetti
verificato che le subqueries sono supportate solo nella clausola WHERE e non
nella clausola FROM, mentre Access le supporta anche nella FROM.



Non discutevo infatti della possibilità di eseguire query innestate,
contestavo solo il posizionamento della query nested nella clausola from...
Il fatto poi che Access le supporti non è significativo: all'interno di
quell'ambiente è possibile fare un sacco di cose che nell'SQL standard non
funzionano (es. utilizzare l'asterisco come carattere jolly, al posto del
%, oppure dover indicare i campi data tra caratteri #). Nei miei primi
esperimenti (1998) creavo la query con il tool visuale all'interno di
Access, la provavo, ne visualizzavo il codice SQL e lo portavo in una
TQuery di Delphi, apposta per vederlo dare in escandescenza.
Il fatto che in Delphi non si utilizzino generalmente componenti nativi per
accedere ai dati, ma strati di software intermedi (es. BDE, OBDC o ADO), mi
porta a criticare certe procedure "localizzate" che poi risultano essere
più suscettibili in caso di modifiche del motore database o ad eventuali
cambiamenti di sitema DBMS (es. passaggio da Access a Interbase).
Tutto qua.
