Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Delphi - Delphi e Oracle
Forum - Delphi - Delphi e Oracle

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
smanettone83 (Normal User)
Pro


Messaggi: 124
Iscritto: 20/10/2010

Segnala al moderatore
Postato alle 10:09
Giovedì, 17/11/2016
Buongiorno a tutti.
Premetto che con i database il mio livello di conoscenza e' pari a 0...
Dovrei realizzare un piccolo tool in grado di interrogare un database in oracle che mi restituisca determinati valori... ovviamente oltre che a leggere dovrei andare anche a scrivere su questi valori. Mi hanno parlato di stringhe di connessione etc etc... ma non ho la piu pallida idea di cosa voglia dire... c'e' in giro un piccolo codice sorgente da poter studiare e capire bene come funziona il tutto? Grazie mille a tutti.
;)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:35
Giovedì, 17/11/2016
No, l'argomento non è banale e non ci sono miracolose scorciatoie.

Libri, libri, tempo, tempo, studio e pazienza ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 11:43
Giovedì, 17/11/2016
Se usi una delle ultime versioni di delphi hai a disposizione il tool "FIREDAC" che ti semplificano molto la connessione con il server SQL, e l'interrogazione delle tabelle.
Se vuoi qualche esempio guarda quelli forniti con FIREDAC sono abbastanza esaustivi, ma tieni presente che tutto gira intorno al linguaggio SQL e nel tuo caso il dialetto SQL di ORACLE.
Se ti serve qualche info chiedi pure, se sono in grado ti rispondo.
G.


Ibis redibis non morieris in bello
PM Quote
Avatar
smanettone83 (Normal User)
Pro


Messaggi: 124
Iscritto: 20/10/2010

Segnala al moderatore
Postato alle 10:48
Venerdì, 18/11/2016
io uso ancora delphi 7 ma non credo ci sia il tool firedac. Diciamo che sto proprio agli inizi e sto cercando di capire un po il discorso tabelle etc etc... non saprei proprio dove mettere mano.. per questo chiedevo se c'era un piccolo sorgente cosi da poter cominciare a dare un occhiata e capire come funziona il tutto.. grazie ancora

PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 12:46
Venerdì, 18/11/2016
No infatti con D7 FireDac non è disponibile se non ricordo male la versione per D7 si chiama(va) AnyDac (la quale è stata comprata da Embarcadero e rinominata in FireDac, forse trovi una versione di AnyDac sul sito Embarcadero).
Comunque a parte FireDac/AnyDac ci sono diversi tool per accedere ad oracle, puoi usare la libreria ADO ODBC per restare con i componenti standard di delphi o DBX Express (non mi ricordo se sono presenti in D7), oppure cercare in giro tool di terze parti come DevArt (https://www.devart.com/), per i vari esempi basta googlare e trovi abbastanza documentazione. Poi per la manipolazione dei dati devi conoscere la classe delphi TDataSet e i suoi discendenti, Table, Query.

PS: Se vuoi un semplice esempio di manipolazione dati puoi scaricarti uno dei miei esempi che sono sul sito, uno si chiama Agenda e l'altro Pressory, il primo usa come base dati un semplice file xml il secondo usa Access e i componenti ADO.


Ibis redibis non morieris in bello
PM Quote
Avatar
smanettone83 (Normal User)
Pro


Messaggi: 124
Iscritto: 20/10/2010

Segnala al moderatore
Postato alle 10:25
Mercoledì, 07/12/2016
allora sono riuscito a far funzionare il tutto con oracle... una domanda. Quando mando un SQL il database mi restituisce la tabella all'interno della DBGRID. C'e' un modo da far visualizzare tutti i campi al di fuori della DBGrid? magari usando una variabile Tstring o simile? In poche parole vorrei non utilizzare il componente DBgrid o almeno non farlo visualizzare e richiamare i valori esternamente.

PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 23:03
Mercoledì, 07/12/2016
Personalmente non ho capito cosa vuoi fare.
Comunque la dbgrid è personalizzabile puoi far vedere solo i campi che desideri, hai 2 strade. La prima è inserire nella select sql solo i campi che voi far vedere es: "select campoA, campoB, campoC from tabella .....". La seconda è selezionare nella grid i campi da far vedere questo lo ottieni facendo un doppio click nella grid ed aggiungedo a mano i campi (colonne) che ti interessano, se hai legato un TDataSource alla griglia l'operazione la fai in modo visuale.
A parte tutto, il ritorno della tua Select SQL ti genera un oggetto TDataSet che puoi manipolare come meglio credi, scorrendo nelle varie property e metodi. L'oggetto TDataSet contiene tutte le informazioni di cui hai bisogno.
Oltre all'oggetto TDBGrid hai a disposizione altri oggetti TDB... con cui costruire una pagina, basta guardare nella "palette" data-controls ed in base alle necessità usi l'oggetto opportuno.
Se specifichi meglio le tue necessità, (forse) riesco a darti qualche dritta.
G.


Ibis redibis non morieris in bello
PM Quote
Avatar
smanettone83 (Normal User)
Pro


Messaggi: 124
Iscritto: 20/10/2010

Segnala al moderatore
Postato alle 20:34
Venerdì, 09/12/2016
perdonami sicuramente sono stato poco chiaro.. in pratico quello che intendevo io e' come leggere i singoli valori di ogni colonna e inserirli all'interno di variabili di tipo Tstring... dovrei aver risolto il problema... ti faccio un esempio... la mia tabella si chiama VATTELAPESCA ed ha 3 colonne: NOME, COGNOME, CITTA.. devo mandare una query e leggere nella colonna NOME il valore Antonio e di conseguenza tutti gli altri valori delle altre colonne... Sto usando questo codice e sembra funzionare... Se e' un metodo grezzo oppure conosci un modo piu pulito di fare questa cosa dimmi pure =)

Codice sorgente - presumibilmente Delphi

  1. var
  2. A,B,C:string;
  3. begin
  4. ADOQuery1.Close;
  5. ADOQuery1.SQL.Clear;
  6. ADOQuery1.SQL.Add('select * from VATTELAPESCA where  NOME= Antonio');
  7. ADOQuery1.Open;
  8. if ADOQuery1.RecordCount = 0 then exit;
  9. A:= ADOQuery1.FieldByName('NOME').AsString;
  10. B:= ADOQuery1.FieldByName('COGNOME').AsString;
  11. C:= ADOQuery1.FieldByName('CITTA').AsString;
  12. Edit1.text:= A;
  13. Edit2.text:= B;
  14. Edit3.text:= C;
  15. end;


PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 23:47
Venerdì, 09/12/2016
Considerando che è un frammento, tecnicamente il tuo codice è esatto, con delle piccole imperfezioni, nel caso di query vuota esci lasciando la query aperta e i campi edit non sono valorizzati, io (personalmente) avrei scritto in modo un po' diverso, ma queste sono mie fisime mentali:
Codice sorgente - presumibilmente Delphi

  1. var
  2.       oSql: TAdoQuery;  // oggetto sql locale
  3.     begin
  4.       oSql := TAdoQuery.Create;  // non ho delphi sotto mano forse è :  oSql := TAdoQuery.Create(nil);
  5.       try
  6.         oSql.connection := connection; // attacco la connection attiva per la select    
  7.         // select secca solo sui campi da leggere, è inutile portarsi dietro campi che non servono  
  8.         oSql.SQL.text := 'select NOME, COGNOME, CITTA from VATTELAPESCA where  NOME= "Antonio"';
  9.         oSql.Open;
  10.         if not (oSql.Bof and oSql.Eof) then // se il dataset risultante non è vuoto
  11.         begin
  12.           Edit1.text := oSql.FieldByName('NOME').AsString;
  13.           Edit2.text := oSql.FieldByName('COGNOME').AsString;
  14.           Edit3.text := oSql.FieldByName('CITTA').AsString;
  15.         end
  16.         else // dataset vuoto resetto i valori
  17.         begin
  18.           Edit1.text := '';
  19.           Edit2.text := '';
  20.           Edit3.text := '';
  21.         end;
  22.       finally
  23.         oSql.Close;  // chiudo la query
  24.         FreeAndNil(oSql);  // libero l'oggetto TAdoQuery
  25.         // oSql.free;
  26.         // oSql := Nil;
  27.       end;
  28.     end;


Se devi solo visualizzare delle informazioni su un record ben preciso e identificabile direi che questa è la strada migliore e più veloce.
Il problema sorge se ti trovi davanti a più record che soddisfano la tua clausula WHERE, nel caso questo codice è da buttare, o almeno da modificare.
Altro problema, ma di minore impatto, nel caso devi fare delle modifiche, in questo caso al momento del salvataggio devi rifare una query di update con la stessa clausula WHERE usata nella Select e leggendo i valori dai vari edit.
Poi ovviamente se ti trovi nel caso di un dataset multirecod a cui devi fare delle modifiche, allora la gestione diventa problematica.
Io, sempre personalmente, nel caso del record singolo immodificabile avrei scritto la stessa cosa, ma nel caso in cui il tutto si trasforma in multirecord e modificabile allora mi affido ai componenti TDBText (e simili) legandoli ad un oggetto TDataSource,  al momento della creazione della pagina imposto la query di apertura della tabella con un "select * from .." attacco al TDataSource la mia query e lascio la gestione delle modifche alla VCL di delphi, gestendo a mano solo i comandi di salvataggio (Post), di annulla modifiche (cancel) e di chiusura pagina chiedendo all'utente, nel caso ci sono state delle modifiche non salvate, cosa vuole fare se salvare o buttare via le modifiche.
G.



Ibis redibis non morieris in bello
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo