Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
How can I avoid explicitly naming columns in sql query?
Message
De
22/07/2002 23:10:35
 
 
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Divers
Thread ID:
00680574
Message ID:
00681456
Vues:
28
Nadya,

Thanks for the code. I will try it out and let you know how it goes. I am also considering writing some routines to preprocess the sql so that the underscores don't make it into the join in the firstplace. Maybe create some methods like this:



>This is not my code, but the code by my colleague:
>
>		IF USED(justname )
>			SELECT &justname
>		ELSE
>			USE (ojc.curtable) in 0 EXCL  && Reopen table to do the alter table
>			SELECT &justname
>			*wait window 'table not there'  && nl  temporary handling.
>		ENDIF
>	lnumflds=afields(fldlistall,justname )  && Get the list of fields in array fldlist
>	DIMENSION  lfldlist(lnumflds)
>	idx=0
>		
>	FOR i=1 to lnumflds
>		IF '_A'$fldlistall(i,1)
>			idx=idx+1
>			lfldlist(idx)=fldlistall(i,1)
>		ENDIF
>		
>	ENDFOR
>	lnumchgflds=idx
>	IF lnumchgflds>0
>		*Wait window nowait 'Number of unclear fields are '+ALLTRIM(STR(lnumchgflds))
>		starttime = seconds()
>		FOR i=1 to lnumchgflds
>			newname=left(lfldlist(i),AT('_A',lfldlist(i))-1)
>			ALTER TABLE (tblname) RENAME COLUMN (lfldlist(i)) TO (newname)
>		
>		ENDFOR
>
>		*wait window nowait "ALTRTABL: Total time = " + str(m.endtime - m.starttime, 10, 4)
>		endtime = seconds()
>		*wait window nowait "ALTRTABL: Total time = " + str(endtime - starttime, 10, 4)
>	ENDIF
>
>This code works on tables only. I guess, you can adjust it to work with cursors.
>
>
>>That sounds good Nadya! I was considering doing something like that. It might save me a lot of time. I'd like to see the code. I assume you are using some trick like 'use again', to get the cursor to be updatable?
>>I will email you.
>>
>>Does it just handle _a or does it handle multiple occurrences - _b _c and also, I have a vague memory that vfp handles things differently if the column name is 10 chars???
>>
>>>For cases like this we have a special post-processing altering table structure code. It changes all columns with _a to just fieldname. Send me a letter to work, I'll send you the code on Monday.
>>>
>>>Could be a Wish List for Toledo.
>>>
>>>>In sql server/transact sql when a query such as:
>>>>
>>>>select * from sosord, sostrs where sosord.csono=sostrs.csono
>>>>
>>>>is executed, the key value appears once in the result set as csono. In vfp you end up with csono_a, and csono_b.
>>>>
>>>>If I want my cursor result to be 'clean' and not have the underscores, then I need to explicitly name all the columns, and include the key from only one of the tables, once. But this results in very long query statements. I wrote a little routine to retrieve all of the column names for a given table into a formatted select string, and put it on the clipboard. This helps speed things up, but I still would be able to use select *.
>>>>
>>>>Is there any syntax, or trick that I can use to shorten my select statements. E.g. I wish there was a keyword like
>>>>
>>>>select * from sosord, sostrs where sosord.csono=sostrs.csono NODUPLICATEKEYVALUES
>>>>
>>>>Is there a specific reason why VFP's sql is implemented so differently than TRANSACT-SQL in such a fundamental area?
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform