Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Search Records from many tables
Message
De
07/11/2014 03:52:49
 
 
À
07/11/2014 00:30:10
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Versions des environnements
Visual FoxPro:
VFP 9 SP2
OS:
Windows 7
Network:
Windows XP
Database:
Jet/Access Engine
Application:
Desktop
Divers
Thread ID:
01610646
Message ID:
01610654
Vues:
50
>Dear Sir,
>
>Data folder has following mdb's
>
>Table1.mdb
>
>mydata.mdb
>
>myinfo.mdb
>
>mydetail.mdb
>
>xyz.mdb
>
>All mdb's have single Table.
>
>The field are same in all Tables like
>
>customer_id
>
>Customer_name
>
>Customer_city
>
>Now I want to search customer_name="Boris" from all tables
>
>Please modify my following query
>
>
>public con
>con = sqlstringconnect("Driver={Microsoft Access Driver (*.mdb)};Dbq=e:\data\...........")
>SQLEXEC(con,"select * from ......... where customer_name=?thisform.text1.value", 'Junk1')
>
CREATE CURSOR cResults (foldername C(254), DBName C(50), TableName C(50))
lcErrorMesssages = [] 

QueryAceess("d:\work\", ALLTRIM(thisform.Text1.Value))
SELECT cResult
BROWSE NORMAL
IF LEN(lcErrorMesssages) > 0
   STRTOFILE(lcErrorMesssages,"ERROR.LOG")
   MODIFY FILE ERROR.LOG NOEDIT NOMENU
ENDIF



FUNCTION QueryAccess(lcFolderName, lcNameSearched)
    LOCAL laFolders[1], lnFolders, laFiles[1], lnFiles
    LOCAL lnFor
    lcFolderName = ADDBS(lcFolderName)

    **** Search ALL MDBs in that folder for the Name
    lnFiles = ADIR(laFiles,lcFolderName+"*.MDB")
    FOR lnFor = 1 TO lnFiles
        SearchMDB(lcFolderName+laFiles[m.lnFor, 1], m.lcNameSearched)
    NEXT

    *** Check to see if there is sub-folders
    lnFolders = ADIR(laFolders,laFolders+"*.*","D")
    FOR lnFor = 1 TO lnFolders
        IF NOT LEFT(laFolders[m.lnFor, 1],1) == [.]
           QueryAccess(ADDBS(lcFolderName+laFolders[m.lnFor, 1]), m.lcNameSearched)
        ENDIF
    NEXT
RETURN

FUNCTION SearchMDB(lcDBName, lcNameSearched)
   LOCAL lnConnection, lcConnectionString, laError[1]
   TEXT TO lcConnectionString NOSHOW TEXTMERGE
         Driver={Microsoft Access Driver (*.mdb)};Dbq=<<lcDBName>>;
   ENDTEXT
   
    lnConnection = sqlstringconnect(lcConnectionString)
    IF lnConnection < 0
       AERROR(laError)
       lcErrorMesssages = lcErrorMesssages + "Can not connect to "+lcDBName+", reason " + laError[1,2]+CHR(13)+CHR(10)
       RETURN
    ENDIF
    IF SQLTABLES(lnConnection,"TABLE","crsTables") < 0
       AERROR(laError)
       lcErrorMesssages = lcErrorMesssages + "Can not get table names, "+lcDBName+" reason " + laError[1,2]+CHR(13)+CHR(10)
       SQLDISCONNECT(lnConnection)
       RETURN
    ENDIF
    SELECT crsTables
    SCAN
        IF SQLCOLUMNS(lnConnection,ALLTRIM(crsTables.Table_Name),"crsColumns") < 0
           DIMENSION laError[1]
           AERROR(laError)
           lcErrorMesssages = lcErrorMesssages + "Can not get column names "+lcDBName+[.]+ALLTRIM(crsTables.Table_Name)+", reason " + laError[1,2]+CHR(13)+CHR(10)
           LOOP
        ENDIF
        SELECT crsColumns
        LOCATE FOR UPPER(ALLTRIM(Field_name)) == "NAMES"
        IF FOUND()
           TEXT TO lcSQL NOSHOW TEXTMERGE
                SELECT FROM  <<ALLTRIM(crsTables.Table_Name)>> WHERE Names  = ?m.lcNameSearched
           ENDTEXT
           IF SQLEXEC(m.lnConnection, lcSQL, "crsResults") < 0
              DIMENSION laError[1]
              AERROR(laError)
              lcErrorMesssages = lcErrorMesssages + "Can not get query "+lcDBName+[.]+ALLTRIM(crsTables.Table_Name)+", reason " + laError[1,2]+CHR(13)+CHR(10)
           ELSE
              INSERT INTO cResults (foldername, DBName, TableName);
              VALUES;
              (JUSTPATH(m.lcDBName),JUSTFNAME(m.lcDBName),ALLTRIM(crsTables.Table_Name))
           ENDIF
        ENDIF
        SELECT crsTables
    ENDSCAN
    USE IN SELECT("crsTables")
    USE IN SELECT("crsColumns")
    USE IN SELECT("crsResults")
    SQLDISCONNECT(lnConnection)
RETURN
NOT TESTED!!!!!
You should correct any syntax errors here normal smile
Against Stupidity the Gods themselves Contend in Vain - Johann Christoph Friedrich von Schiller
The only thing normal about database guys is their tables.
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform