Newsgroup: it.comp.lang.delphi
Titolo: Ci riprovo... BDE e primary key

Ciao a tutti,
Alla fine non per mia volontà, mi ritrovo a utilizzare BDE al posto di
ADO.
Vorrei individuare le p_key di una TABLE, mi sono imbattuto in questa
istruzione dell'HELP di D2006 che sembra funzionare, non vorrei però
rilasciare una cosa sbagliata:
 if Table1.FieldDefs[X].Required= true then showmessage('CHIAVE
PRIMARIA');
Secondo voi è corretta ?
Ciao e grazie per eventuale aiuto

 Secondo voi è corretta ?
No. Non è detto che un campo "Required" sia una Chiave Primaria.
Devi vedere la proprieta Option della proprietà IndexDef di ogni Field
se contiene il valore ixPrimary
Ciao
ACSH
-- 
If you don't think carefully, you might think that programming is
just typing statements in a programming language.
(Ward Cunningham) 

 se contiene il valore ixPrimary
E' l'unica possibilità ? Da HELP di Delphi leggo
Not all table types support use of all of the above index options.
Even within a particular table type, any given option may only be
supported in certain versions of a table type. See the BDE
Administrator or Database Explorer utility for information on local
table levels.
ETC.ETC.
dBASE tables only support primary indexes and true unique indexes when
the table level is 7 or higher (concurrent with Visual dBASE 7). dBASE
tables do not support case-insensitive or descending indexes at all.
Use the ixExpression constant when the index is based on multiple
fields or uses dBASE data manipulation language functions (that is,
for expression indexes). The ixExpression constant is only applicable
to dBASE tables.
Paradox tables support the ixDescending for secondary indexes if the
table level is 7 or higher and the ixUnique constant if the table
level is 5 or higher. The ixDescending and ixCaseInsensitive constants
are not applicable to primary indexes.
For SQL-based table types, see the vendor-supplied documentation for
the particular database system for details on what index options are
applicable.
Ed effettivamente ho qualche problema su DB2-Express-WinXP.
Se utilizzo ixPrimary infatti le PK non vengono individuate !
La domanda che ti faccio è se un Field è una PK è per forza Required,
anche se come mi dici se è Required non è necessariamente una PK ?
Ciao e grazie

La domanda che ti faccio è se un Field è una PK è per forza Required,
No, anche perché non è affatto detto che l'applicazione imposti il
valore per la chiave primaria, potrebbe ad esempio essere assegnato
dal database (come accade spessissimo).
Se il tuo database è conforme allo standard SQL, dovrebbe supportare
la tabella "information_schema" che riporta i dati specifici sulla
struttura del database (MySQL e Postgres, ad esempio, la supportano).

 la tabella "information_schema"
??
Ogni DB in realtà ha la sua tabella, in DB2 dovrebbe essere in the
"syscat" o "sysibm" che è uno schema. In MySQL se non erro dovrebbe
esserci un DB a parte per gestire tutte queste informazioni. Sto
lavorando su DB2 ma non è detto che in futuro il database possa
cambiare.
Forse ho sbagliato la domanda.Quello che devo fare è un datamart,
importando delle strutture di tabelle, quindi dovrei puntare a un
campo con valori not null e unique.
Però la tabella information_schema potrebbe essere su un DB differente
e ciò richiederebbe un ulteriore ODBC.
Mi spiego meglio, in Postgre

esserci un DB a parte per gestire tutte queste informazioni. 
INFORMATION_SCHEMA. Una vista di sistema, non un db.

 Secondo voi è corretta ?
Secondo me non lo è :
if Table1.FieldDefs[X].Required then showmessage('CHIAVE PRIMARIA');
perchè è implicito che l'espressione condizionale deve essere vera.
Ciao
Mario - (
mari...@inwind.it
 )
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

sia chiave primaria, è una questione puramente applicativa.
Ti chiedo però in che sento "applicativa". Per fare un'esempio, se
creo una tabella con una istruzione SQL con campo codice NotNull, e
vado a vedere se è required, Delphi le assegnerà un valore true.
Questo non accade per campi generici che possono assumere valore null.
Grazie per eventuali snocciolamenti della questione.

 vado a vedere se è required, Delphi le assegnerà un valore true.
Non è affatto detto e se accade questo con i tuoi componenti TDataSet,
allora è una libertà presa dai tuoi componenti. Il valore di Required,
peraltro, può essere benissimo cambiato per quel particolare campo, ma ciò
non implica che non sia più NOT NULL su DB (ovviamente).
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Grazie, approfondico in questi giorni. Ciao

Ho approfondito parlando con un consulente mio amico,
La sua opinione è che è vero che "Required" riguarda una questione
puramente applicativa. Però se tali proprietà non sono assegnate per i
relativi campi, Delphi assegna in prima lettura la proprietà del campo
del DB.
Una sorta di default, paragonabile al valore false dei campi boolean,
ma in questo caso inerente allo stato dei campi.
Quindi è possibile rilevare in prima lettura la condizione necessaria
affinchè un particolare campo sia una PK.
Information_schema è una buona idea, ma andando in ODBC bisognerebbe
in certi casi creare due diversi driver vedi MySQL o Oracle.
Smanite gradite, Ciao!

in certi casi creare due diversi driver vedi MySQL o Oracle.
Veramente, con qualsiasi tecnologia di accesso ai dati da Delphi (non
solo ODBC) hai bisogno di due driver distinti, vedi per MySQL o per
Oracle.

 Veramente, con qualsiasi tecnologia di accesso ai dati da Delphi (non solo ODBC) hai bisogno di due driver distinti
Però utilizzando FieldDefs mi collego con un unico driver ODBC.
Non capisco però come funziona IndexDefs, come posso relazionare un
indice ai campi in lettura ? Esempio capire che una ixPrimary
appartiene a un determinato campo ?
Ma la cosa più importante è questa, è possibile con una query SQL
ottenere queste informazioni, cioè leggere le PK di una tabella ?
Francamente non me ne sono mai occupato.
Ti ringrazio molto per le preziose indicazioni e mi scuso per
l'ulteriore reply.

 ottenere queste informazioni, cioè leggere le PK di una tabella ?
Noneeeeeeee. Non c'è modo di sapere qual'è la PK di una tabella, senza
investigare i metadati come, appunto, la vista information_schema.
Sergio, a me sembra di aver trattato l'argomento anche troppo e di aver
contribuito a chiarire i dubbi, per cui non risponderò ulteriormente.


 contribuito a chiarire i dubbi, per cui non risponderò ulteriormente.
Mi hai convinto :-D
Ti ringrazio tantissimo per il prezioso e sottile contributo e mi
scuso ulteriormente per l'insistenza della domanda.
Ciao

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
INFORMATION_SCHEMA una vista di sistema, non un db. COSA ???!!!
Information schema è uno schema, non di sistema anche se viene letto dal 
sistema. Peccato che in alcuni casi coincide proprio con un DB vedi 
MySQL. Per Postgres citato invece è uno schema per ogni DB.
Quindi la tua osservazione Sergio è più che legittima cioè quella di 
dover ricorrere a due ODBC, in quanto ne serve uno per ogni DB e nel 
caso di MySQL ad esempio devi crearne uno per il DB INFORMATION_SCHEMA e 
uno per il tuo DB di produzione.
Non è polemica o attacco al professionista Laforgia, ma solo delle 
precisazioni importanti.
In definitiva a bocce ferme con ODBC funzionante Required è condizione 
necessaria affinchè un campo abbia una PK.
Tenete presente che certi ODBC per DB2 di IBM non leggevano le tabelle 
con nomi più lunghi di 18 caratteri, non per questo Delphi non può 
gestirli. Allo stesso modo Delphi può leggere se un campo è not null con 
la proprità Required.
Spero di essere stato chiaro.
Ciao.
--- posted by geoForum on 
http://www.delphiedintorni.it

 necessaria affinchè un campo abbia una PK.
"Un campo abbia una PK" non vuol dire assolutamente nulla.
Quanto affermi è semplicemente ERRATO. ODBC è un ponte verso i dati, BDE è
un *ALTRO* ponte verso i dati e l'impostazione di Required a True *NON* è
necessariamente automatica. Required è una proprietà che vale *SOLO* a
livello applicativo e non implica assolutamente nulla (vedi "condizione
necessaria"), tantomeno a livello di chiavi primarie.  Se un campo è
chiave primaria e quindi NOT NULL, *NON E' AFFATTO DETTO* che il valore di
Required sia True per il TField corrispondente.
Provare per credere.  Chiudo qui.


>Provare per credere.  Chiudo qui.
Chiudi pure dove vuoi, però come dici giustamente
Required <--> BDE <--> ODBC
Se ODBC è corretto BDE passa *SEMPRE* un not null a required come true.
Basta fare delle prove e vedere che quanto ho detto è corretto !


 Basta fare delle prove e vedere che quanto ho detto č corretto !
Sei il solito troll imbecille e questo č l'ennesimo indirizzo che
aggiungerň al kill-file.


Secondo me sei troppo impegnato ad affermare il tuo nome e non hai il 
coraggio di ammettere di aver sbagliato, ti arrampichi sui vetri !
Credo che tutti i partecipanti al NG possano ben giudicare da quanto 
scritto.
Non ho molto tempo da perdere, basta fare delle prove per vedere che BDE 
*RILEVA* senza alcun problema i valori dei campi not null attraverso 
REQUIRED.
Affermando il contrario sostieni l'esistenza di un BUG che non esiste, 
infatti Required legge lo stato dei campi di un DB e se non funzionasse 
come dici TU si tratterebbe soltanto di un BUG !!! E Borland non 
permetterebbe la lattura dello stato dei field !!!!
La politica di chi sostiene Microsoft che introduce ADO è gettare fango 
su ODBC, però di fatto BDE è presente in Delphi e il 
livello "applicazione" di cui parli non esiste, perchè lo stato REQUIRED 
viene importato.
Ergo fai disinformazione e il Troll sei tu perchè sostieni un ERRORE per 
aver ragione!


 viene importato.
Ma quanto sei ignorante?
Per favore, diccelo. All'istituto dove sei ricoverato qualche test
dovranno averlo pur fatto ... quali sono stati i risultati?


Secondo me state confondendo lo spirito di un NG in cui si parla di 
Delphi. Volete avere ragione e non per approfondire gli argomenti.
Facciamo questo esperimento:
1) BDE con Required importa dei campi di un qualsiasi DB
Fatto ? Bene, se Required ha messo dei campi a true e dei campi a false, 
questo significa che ha importato dei dati.
Quindi se li ha importati in modo RANDOM perchč Borland dovrebbe 
permettere un comportamento del genere ? Quindi non ha senso.
Se non li ha importati in modo RANDOM significa che ha letto dei NotNull 
e quindi !
1) Ho Required di BDE ha dei BUG
oppure:
2) Se Required di BDE non ha BUG e non riesce a leggere dei valori 
significa che il problema č di chi ha passato i dati (ODBC).
Conclusione il BUG si annida solo nella vostra TESTA cioč saltate un 
passaggio logico.
PS. Io conosco bene le Routines di BDE e vi consiglio di stare zitti 
perchč piů parlate e piů fate una figuraccia...


 perchè più parlate e più fate una figuraccia...
Ma quanto sei ignorante?
All'istituto dove sei ricoverato ti hanno pure dato i sorgenti del BDE?


Caro Andrea,
Sei proprio incorreggibile... Sai benissimo dove trovare le sorgenti 
BDE... Vedi Delphi 3 e guarda cosa fa la Required !


In particolare ti consiglio di dare bene un'occhiata a questa funzione:
function Get_Required(out pRet: OleVariant): HResult; stdcall;
poi fammi sapere se sei sempre della stessa opinione.
Ciao.


 function Get_Required(out pRet: OleVariant): HResult; stdcall;
Ma quanto sei ignorante?
All'istituto dove sei ricoverato non ti hanno mai spiegato gli ActiveX?
Ah, non sono Laforgia: ti sei fatto un nuovo amico.


All'istituto dove sei ricoverato non ti hanno mai spiegato gli ActiveX?
Mi spiace non ho tempo da perdere con Troll e Cretini.. Buon voyage.. !


Sei Andrea Laforgia o il suo sostituto in *TELELAVORO*, lasci una 
traccia !
Probabilmente ignorate chi siamo NOI ! Che siamo piů in alto di quelli 
che sono sopra di voi. 
Una sola cosa ragazzi, non sparate cazzate su Delphi tanto per aver 
ragione...


Questi proprio news group italiano !
Required legge bene Not Null sanno tutti.
Dan


Non ascoltare Troll, Required legge bene Not Null sanno tutti, basta 
fare prova. Nessun problema con ODBC che č raro. 
Dan


Required funziona ha ragione Buccinelli. Non ascolare Troll.


Mario non ascoltare Andrea Laforgia è Troll molto fine per problema 
complesso. Leggi altri post molte imprecisione.
Ciao
  Dan.


complesso. Leggi altri post molte imprecisione.
Lo so è gentaglia credono di essere bravi ma sono dei poveri ignoranti ! 
Lasciamoli perdere e continuiamo il nostro onesto lavoro.
Ciao e grazie..


 che sono sopra di voi. 
Ma quanto sei ignorante?
All'istituto dove sei ricoverato non ti danno piu' le medicine per le
disfunzioni delle personalità multiple (oltre tutto una più ignorante
dell'altra)?


dell'altra)?
Molta gente soffre negli istituti, sono situazioni tremende e sono 
imbottiti di farmaci per non soffrire.
Per me prima di prendere in giro queste situazioni dovresti fare un 
giro. Dico davvero ti servirebbe per capire che cosa sei e che cosa la 
vita è davvero.
Tre regole:
1) Rispetto
2) Onestà
3) Saper ammettere gli errori
Sei un cafonazzo qualunque e molto molto ignorante. Spero che migliori..
Ergo sei un povero imbecille, chiudo qui perchè non meriti nemmeno un 
secondo del mio tempo prezioso, sarebbe come dare le perle ai porci.
Sei talmente lontano dall'essere in grado di capire qualunque cosa dica 
una qualsiasi delle persone qui, che (questa conversazione) sta 
approssimandosi all'inutilità. La cosa più triste è che credi davvero 
che tu stia vincendo. Sei uno scioccante spreco di risorse naturali: 
gentilmente, reinserisciti nella catena alimentare... fetente troll 
senza cervello !


XXXX ha scritto:
<cut>
Ma quanto sei ignorante?
All'istituto dove sei ricoverato non hanno insegnato che a far le prediche
bisogna esser capaci?


FuQ You melone senza semi... !


 FuQ You melone senza semi... !
Ma quanto sei ignorante?
All'istituto dove sei ricoverato non ti hanno ancora insegnato come si
risponde in un thread?


risponde in un thread?
Hai il sistema storto amico... Sei Laforgia ! Hai un SW che non permette 
il reply...
Sei paragonabile a una zucchina , quindi chiudo qui avendo da fare con 
una tipa che ho conosciuto settimana scorsa...
Adieaů ZUCCHINA farcita !!!


 una tipa che ho conosciuto settimana scorsa...
Ma quanto sei ignorante?
All'istituto dove sei ricoverato non te l'hanno mai spiegato che se stai
davanti tu e LEI sta dietro e spinge, non è una "tipa"?


davanti tu e LEI sta dietro e spinge, non č una "tipa"?
Mai conosciuto in un NG uno cosě cretino... Di cosa ti fai ? Ti 
spoppio... Hahahahah ROTFL....
All'istituto dove ti hanno scurnacchiato non ti hanno insegnato a non 
scassare u mouse ? FAC YOU...
La tipa che mi faccio č una Russa di 22 anni, cose di cui tu molto 
probabilmente ignori l'esistenza, proprio come le Routines BDE.
VA DE RETRO SARAGAT !!! Rotfl... Sei proprio uno spasso 8-P


 spoppio... Hahahahah ROTFL....
Ma quanto sei ignorante?
All'istituto dove sei ricoverato non ti hanno mai detto che chi risponde
alla una e mezza di notte e' un poveretto?


alla una e mezza di notte e' un poveretto?
In che senso... ?? Il giorno è fatto di 24 ore perchè non usarle tutte ? 
Non mi dire che sei il classico condizionato dalla società degli anni 50 
che mangia sempre alla stessa ora, va a dormire alla stessa ora e va a 
messa tutte le domeniche .... DAI.... Sveglia kz, movimenta la tua vita, 
dagli un giro di adrenalina.... !!! Esci conosci delle ragazze e 
divertiti anzichè fare il saputello professorino con gli occhiali in 
questo NG....  
Sei già dentro l'happy hour vivere vivere costa la metà... Etc Etc. 
Gonfia le tue vele e ciuccia il midollo, spezza le catene dell'azienda e 
goditela... Cioè quando esci dal lavoro attivati... e soprattutto 
VIVI !!!!


 In che senso... ?? Il giorno è fatto di 24 ore perchè non usarle tutte ? 
**Form Flame v1.4* *Form Flame v1.4* *Form Flame v1.4* *Form Flame v1.4**
========================================================================
Caro/a:
  [x] Idiota senza speranza   [x] Cretino     [ ] Pirata
  [ ] Signor "Anch'io"        [ ] Pervertito  [x] Pseudo Esperto
  [xxx] Rompicoglioni         [x] Sfigato     [x] Lamer
  [x] Troll                   [ ] Mostro      [ ] Truffatore
  [ ] Utonto                  [ ] Bambinetto  [x] Postatore di Off-Topic
  [ ] Novizio smarrito        [ ] Paranoico   [ ] Inondatore di gruppi
  [ ] Spammer                 [ ] Fanatico    [ ] Preadolescente
  [ ] Imbroglione             [x] Fallito     [x] Bestione
  [x] Puzzone                 [ ] Maniaco     [x] Utente di Windows
  [ ] Utente di Outlook       [ ] Luser       [ ] _________________
  [ ] Tutto quanto sopra
Sei stato reputato oggetto di flame perche`:
  [ ] Non hai letto le FAQ
  [ ] Non sai cosa sia la NETIQUETTE
  [ ] Hai scritto un messaggio completamente sgrammaticato
  [ ] Hai spedito files binari in un ng dove non e` permesso
  [ ] Hai postato dati binari in segmenti *MAGGIORI* di 5000 linee
  [ ] Hai spedito un messaggio chiedendo di siti pirata
  [ ] Hai quotato un INTERO messaggio nella tua risposta
  [x] Hai continuato un lungo, stupido thread
  [x] Hai parlato a lungo di un argomento del cazzo
  [x] Hai cominciato un off-topic
  [x] Hai continuato un off-topic
  [x] Hai postato un articolo del tipo: "fate tutti cagare"
  [x] Hai postato piu` volte lo stesso messaggio, rompendo fin troppo le 
palle
  [x] Hai spedito un messaggio che diceva "NON VALETE UN CAZZO"
  [x] Hai spedito banalita` mostruose
  [ ] Hai detto "Anch'io" / "Sono d'accordo" quotando TUTTO il post 
precedente
  [ ] Hai spedito messaggi pubblicitari (spam) dove non e` permesso
  [ ] Non hai rispettato gli standard di rete
  [ ] Il tuo provider e` il peggiore sulla piazza
  [x] Hai postato un troll fin troppo ovvio
  [ ] Hai fatto finta di essere un personaggio famoso (vedi troll 
precedente)
  [ ] Hai risposto all'articolo di cui sopra cadendo nel troll
  [ ] Hai un nome/nickname/alias veramente ridicolo
  [ ] Hai una signature ingombrante ed inutile
  [ ] Hai postato uno schema piramidale per far soldi (catena di 
Sant'Antonio) dicendo che
era legale
  [ ] La tua firma, il tuo alias o il tuo server fanno cagare
  [ ] Credo che tu sia uno sbirro o un rappresentante di qualcuno che 
reputa illegale
quello che succede su questo newsgroup
  [ ] Hai postato in MaIuScOlE Da ElItE perche` credi di essere figo
  [ ] Hai iniziato un crosspost inutile
  [ ] Hai spedito qualcosa in MaIuScOlE pensando che sia figo
  [x] Hai mandato un post che fa cagare
  [x] Hai completamente equivocato il significato di questo newsgroup
  [x] Non hai fatto nulla di specifico, ma il tuo agire sembra comunque 
cosi` schifoso che
ti sei meritato una bella flame a prescindere
  [x] Non hai fatto nulla di specifico, ma tu mi sembri cosi` tanto 
inutile  che il flame
te lo mando lo stesso
  [x] Non vali un cazzo
  [ ] ____________________
  [ ] Tutto quanto sopra
Per dimostrare il tuo pentimento devi:
  [x] Disdire il tuo abbonamento a Internet o comunque rinunciare ad usarlo
  [x] Dire alla tua Mamma che sei stato cattivo e che meriti una punizione
  [x] Saltare in una vasca da bagno piena con il monitor acceso in braccio
  [ ] Andare a cercare personalmente Rasmus Lino/Lind/Lindt e 
stringergli la mano
  [x] Postare (finalmente) qualcosa di interessante
  [ ] Leggere la FAQ (ovvero la lista di domande frequenti)
  [ ] Modificare il tuo newsreader o cambiarlo
  [ ] Cambiare sistema operativo
  [ ] Leggere tutti i messaggi presenti sul tuo newsserver
  [ ] Spostarti nel newsgroup adeguato
  [x] Essere l'ospite d'onore per un mese in it.fan.culo, in 
it.discussioni.litigi e in
alt.flame
  [ ] _____________________
  [ ] Tutto quanto sopra
Concludendo, vorrei dirti:
  [x] Informati prima di postare
  [x] Levati dalle palle
  [x] Cerca di svegliarti
  [x] Non postare piu` nulla
  [x] Ho pieta` del tuo cane
  [x] Non potresti fare nulla con un cervello neanche se tu lo avessi
  [x] Invecchia di almeno 10 anni prima di spedire altro
  [x] Da questo momento sarai presente nel killfile mio e spero anche di 
tutti gli altri
frequentatori di Usenet e del mondo intero, reale e virtuale
  [x] Impara ad usare Internet e poi ne riparleremo
  [x] Succhiamelo
  [x] Provo pieta` per i tuoi familiari
  [x] Mi fai cagare, o vomitare, o entrambe le cose
  [x] Se tu avessi un cervello non sapresti come usarlo
  [x] Vai all'inferno
  [ ] Tua mamma e` cosi` grassa/stupida/brutta che ecc...
  [x] Vaffanculo, patetico coglione
  [x] Vaffanculo, sfigato di merda
  [x] *Plonk*
  [x] Dacci un taglio
  [ ] ____________________
  [ ] Tutto quanto sopra citato
========================================================================
*Form Flame v1.4**Form Flame v1.4**Form Flame v1.4**Form Flame v1.4**
-- 
Jax

 VIVI !!!!
Ma quanto sei ignorante?
All'istituto dove sei ricoverato ti hanno mai detto che se tutti ti
chiamano
FESSO un motivo ci sarą?
Mi dispiace lasciarti, ma devo partire per il Week End.
Ti lascio un compitino per questi tre giorni: informati sul significato
di "LOG degli IP".


di "LOG degli IP".
Patetico....  la repressione di stampo dittatoriale come la tua ci fa 
sorridere.... E vergognare che la nostra societą abbia questo VIRUS. Ma 
ricorda parte non civilizzata, l'essere libero non si ferma mai perchč 
sta al centro del flusso...
Andai nei boschi per succhiare il midollo della vita e a capire tutto 
ciņ che non č vita... Per accorgermi in punto di morte di non essere mai 
vissuto...


>di "LOG degli IP".
Sai cos'è la mia tristezza.. ? Non sei l'unico cretino che si trova in 
giro...
