Help and Support

ID do artigo: 207595 - Última revisão: quarta-feira, 4 de março de 2009 - Revisão: 6.0

Como fazer o SQL Server 2000 distribuído consultas com arquivos .dbf do FoxPro

Expandir tudo | Recolher tudo

Sumário

Este artigo mostra como executar uma consulta distribuída do SQL Server para recuperar dados de arquivos de .dbc e .DBF de FoxPro usando o driver de ODBC VFP ou VFP provedor de banco de dados OLE do.

Mais Informações

O Microsoft SQL Server 2000 fornece a capacidade de executar consultas em provedores de banco de dados OLE. Isso é feito usando as funções OpenQuery ou OpenRowset Transact-SQL ou usando uma consulta com nomes de quatro partes incluindo um nome de servidor vinculadas.

Por exemplo:

sp_addlinkedserver 'mylinkedserver', 'product_name', 'myoledbprovider', 'data_source', 'local', 'provider_string', 'catálogo'

SELECT * FROM OPENQUERY(mylinkedserver, 'select * from table1')

Você deve usar o provedor Microsoft OLE DB para ODBC (MSDASQL) e o driver do Visual FoxPro ODBC para configurar um servidor vinculado para executar consultas distribuídas em arquivos .dbc e .dbf do FoxPro. Não há suporte para usando o provedor de OLEDB do Jet com FoxPro. O driver de ODBC VFP não é thread-safe. Como o SQL Server é multithread, o driver de ODBC VFP pode causar problemas em algumas circunstâncias. Se for possível, é recomendável usando o VFP OLE DB Provider para se conectar aos dados do SQL Server.

O exemplo de código T-SQL a seguir demonstra como configurar e usar consultas distribuídas com FoxPro com funções OpenQuery e OpenRowset. Ele também demonstra como atualizar uma tabela do FoxPro remota do SQL Server 2000. Você pode testar esse código no SQL Query Analyzer após a instalação o driver do Visual FoxPro ODBC em um computador SQL Server 2000. Você precisará alterar os nomes de fonte de dados e o caminho para o FoxPro arquivos conforme apropriado:
/* OPENROWSET and OPENQUERY examples with VFP via ODBC OLE DB provider */ 

/* These OPENROWSET examples depend on the sample files VFP98\data\Testdata.dbc
Modify your code accordingly for differences in location or DBC name */ 

--====================================================
-- Using DBC file , read and update
--====================================================
-- OPENROWSET DSN-less example

select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data\Testdata.dbc;
SourceType=DBC',
'select * from customer where country != "USA" order by country')
go

select * from  openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data\Testdata.dbc;
SourceType=DBC',
'select * from customer where region="WA"')
go

Update  openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data\Testdata.dbc;
SourceType=DBC',
'select * from customer where region="WA"')
set region = "Seattle" 
go

-- check to verify which rows were updated
select * from  openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data\Testdata.dbc;
SourceType=DBC',
'select * from customer where region="Seattle"') 
go

-- OPENROWSET DSN example
/* Note the DSN Example might fail if SQL Server is configured to use a local account.*/ 
select * from openrowset('MSDASQL',
'DSN=Visual FoxPro Database;
SourceDB=e:\VFP98\data\Testdata.dbc;
SourceType=DBC',
'select * from customer where country != "USA" order by country'
go

/* sp_addlinkedserver examples */ 
-- sp_addlinkedserver example with DSN

/* You will need to make a DSN and point it to the Testdata database. 
Modify your code accordingly for differences in location or DBC name */ 

/* Note this Example may fail if SQL Server is configured to use a local account.*/ 
sp_addlinkedserver 'VFP Testdata Database With DSN', 
    '', 
    'MSDASQL',
    'VFP System DSN'
go

sp_addlinkedsrvlogin 'VFP Testdata Database With DSN', FALSE, NULL, NULL, NULL
go 

SELECT *
FROM OPENQUERY([VFP Testdata Database With DSN], 'select * from customer where region = "Seattle"') 
go

-- Update using OpenQuery
Update OPENQUERY([VFP Testdata Database With DSN], 'select * from customer where region="WA"') 
set region = "Seattle" 
go

/* SP_addlinkedserver example with DSN-less connection */ 

/* This example also depends on the sample files Testdata.dbc
Modify your code accordingly for differences in location or DBC name */ 

sp_addlinkedserver 'VFP Testdata Database With No DSN', 
    '', 
    'MSDASQL',
    NULL,
    NULL,
'Driver={Microsoft Visual FoxPro Driver};UID=;PWD=;SourceDB=e:\VFP98\data\Testdata.dbc;SourceType=DBC;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;'
go

sp_addlinkedsrvlogin 'VFP Testdata Database With No DSN', FALSE, NULL, NULL, NULL
go

SELECT *
FROM OPENQUERY([VFP Testdata Database With No DSN], 'select * from customer where country != "USA" order by country') 
go

--====================================================
-- Using VFP 6.0 driver, read and update data from VFP sample dbf files
--====================================================

-- OPENROWSET DSN-less example

select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF',
'select * from customer where country != "USA" order by country')
go

-- perform UPDATE

Update openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF',
'select * from customer where region="Seattle"')
set region = "WA"
go

-- verify update

select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF',
'select * from customer where region = "WA"')
go<BR/>

-- OPENROWSET DSN example
-- DSN points to the folder where .dbf files are.
/* Note this Example may fail if SQL Server is configured to use a local account.*/ 
select * from openrowset('MSDASQL',
'DSN=Visual FoxPro Tables;			
SourceDB=e:\VFP98\data;
SourceType=DBF',
'select * from customer where country != "USA" order by country') 
go"?
-- SQL Server's QUOTED_IDENTIFIER has to be set to OFF.

 

SET QUOTED_IDENTIFIER OFF

 

            -- OPENROWSET DSN-less example

            

            select * from openrowset('MSDASQL',

            'Driver=Microsoft Visual FoxPro Driver;

            SourceDB=e:\VFP90\samples\data\Testdata.dbc;

            SourceType=DBC',

            'select * from customer where country = "USA" order by city')

            go

            

            select * from  openrowset('MSDASQL',

            'Driver=Microsoft Visual FoxPro Driver;

            SourceDB=e:\VFP90\samples\data\Testdata.dbc;

            SourceType=DBC',

            'select * from customer where region="WA"')

            go

            

            Update  openrowset('MSDASQL',

            'Driver=Microsoft Visual FoxPro Driver;

            SourceDB=e:\VFP90\samples\data\Testdata.dbc;

            SourceType=DBC',

            'select * from customer where city = "Seattle"')

            set region = "WW" 

            go

            

            -- check to verify which rows were updated

            select * from  openrowset('MSDASQL',

            'Driver=Microsoft Visual FoxPro Driver;

            SourceDB=e:\VFP90\samples\data\Testdata.dbc;

            SourceType=DBC',

            'select * from customer where region="WW"') 

            go

            

            -- OPENROWSET DSN example

            /* Note the DSN Example might fail if SQL Server is configured to use a local account.*/ 

            select * from openrowset('MSDASQL',

            'DSN=Visual FoxPro Database;

            SourceDB=e:\VFP90\samples\data\Testdata.dbc;

            SourceType=DBC',

            'select * from customer where country = "USA" order by city')

            go

            

            /* sp_addlinkedserver examples */ 

            -- sp_addlinkedserver example with DSN

            

            /* You will need to make a DSN and point it to the Testdata database. 

            Modify your code accordingly for differences in location or DBC name */ 

            

            /* Note this Example may fail if SQL Server is configured to use a local account.*/ 

            sp_addlinkedserver 'VFP Testdata Database With DSN', 

                '', 

                'MSDASQL',

                'VFP System DSN'

            go

            

            sp_addlinkedsrvlogin 'VFP Testdata Database With DSN', FALSE, NULL, NULL, NULL

            go 

            

            SELECT *

            FROM OPENQUERY([VFP Testdata Database With DSN], 'select * from customer where city = "Seattle" ') 

            go

            

            -- We will set the region back to "WA" if it currently is "WW".

            -- Update using OpenQuery

            Update OPENQUERY([VFP Testdata Database With DSN], 'select * from customer where city = "Seattle" ') 

            set region = "WA" 

            go

            

            -- Make sure that the region got updated.

            SELECT *

            FROM OPENQUERY([VFP Testdata Database With DSN], 'select * from customer where city = "Seattle" ') 

            go

            

            /* SP_addlinkedserver example with DSN-less connection */ 

            

            /* This example also depends on the sample files Testdata.dbc

            Modify your code accordingly for differences in location or DBC name */ 

            

            sp_addlinkedserver 'VFP Testdata Database With No DSN', 

                '', 

                'MSDASQL',

                NULL,

                NULL,

            'Driver={Microsoft Visual FoxPro Driver};UID=;PWD=;SourceDB=e:\VFP90\samples\data\Testdata.dbc;SourceType=DBC;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;'

            go

            

            sp_addlinkedsrvlogin 'VFP Testdata Database With No DSN', FALSE, NULL, NULL, NULL

            go

            

            SELECT *

            FROM OPENQUERY([VFP Testdata Database With No DSN], 'select * from customer where country = "USA" order by city') 

            go

            

            --====================================================

            -- Using VFP 6.0 driver, read and update data from VFP sample dbf files

            --====================================================

            

            -- OPENROWSET DSN-less example

            

            select * from openrowset('MSDASQL',

            'Driver=Microsoft Visual FoxPro Driver;

            SourceDB=e:\VFP90\samples\data;

            SourceType=DBF',

            'select * from customer where country != "USA" order by country')

            go

            

            -- perform UPDATE

            

            Update openrowset('MSDASQL',

            'Driver=Microsoft Visual FoxPro Driver;

            SourceDB=e:\VFP90\samples\data;

            SourceType=DBF',

            'select * from customer where city = "Seattle"')

            set region = "WW" 

            go

            

            -- verify update

            

            select * from openrowset('MSDASQL',

            'Driver=Microsoft Visual FoxPro Driver;

            SourceDB=e:\VFP90\samples\data;

            SourceType=DBF',

            'select * from customer where region = "WW"')

            go

            

            -- OPENROWSET DSN example

            -- DSN points to the folder where .dbf files are.

            /* Note this Example may fail if SQL Server is configured to use a local account.*/ 

            select * from openrowset('MSDASQL',

            'DSN=Visual FoxPro Tables;                              

            SourceDB=e:\VFP90\samples\data;

            SourceType=DBF',

            'select * from customer where country != "USA" order by country') 

            go

você também pode usar o Visual FoxPro OLE DB Provider para criar uma consulta distribuída. Isso é a tecnologia preferencial para usar. Observe que enquanto este código mostra como atualizar e excluir dados, adicionar, atualizar (Editar), e a exclusão de dados em uma consulta distribuída usando o provedor OLEDB não é suportada.

O exemplo de código T-SQL a seguir demonstra como configurar e usar consulta distribuída com FoxPro com funções OpenQuery e OpenRowset. Você pode testar esse código no SQL Query Analyzer após a instalação Visual FoxPro provedor de banco de dados OLE em um computador SQL Server 2000. Você precisará alterar os nomes de fonte de dados e o caminho para o FoxPro arquivos conforme apropriado:
 '/* These OPENROWSET examples depend on the sample files VFP98\data\Testdata.dbc

'Modify your code accordingly for differences in location or DBC name */

 

--*====================================================

--* Using the DBC file, reading and updating data.

--*====================================================

--* A couple of OPENROWSET queries.

select * from openrowset('VFPOLEDB',

'e:\vfp7junk\Testdata.dbc';'Exclusive=No';'Data Source=DBC',

'select * from customer where country != "USA" order by country')

go

 

Select * from openrowset('VFPOLEDB',

'e:\vfp7junk\Testdata.dbc';'Exclusive=No';'Data Source=DBC',

'select * from customer where region="WA"')

go

 

--* Need to use an error trapping routine with the UPDATE and DELETE functions:

select * from

 openrowset('VFPOLEDB',

   'E:\VFP7Junk\Testdata.DBC';'Exclusive=No';'Data Source=DBC',

   'Update Customer Set city = "SEATTLE" where region = "WA" ') 

go

declare @upderror int

select @upderror = @@error

print ''

if @upderror != 7357 and @upderror != 0

            print  'Update failed with error '+convert(varchar(5),@upderror)

else

            print 'Ignore the error above, the Update succeeded'

go

 

 

-- check to verify which rows were updated

select * from  openrowset('VFPOLEDB',

'E:\VFP7junk\Testdata.DBC';'Exclusive=No';'Data Source=DBC',

'select * from customer where region = "WA"')

go

 

--* Change the City field back to "Seattle".

 

select * from

 openrowset('VFPOLEDB',

   'E:\VFP7Junk\Testdata.DBC';'Exclusive=No';'Data Source=DBC',

   'Update Customer Set city = "Seattle" where region = "WA" ') 

go

declare @upderror int

select @upderror = @@error

print ''

if @upderror != 7357 and @upderror != 0

            print  'Update failed with error '+convert(varchar(5),@upderror)

else

            print 'Ignore the error above, the Update succeeded'

go

 

--* The DELETE fucntion also causes an error, but the DELETE works.

select * from

 openrowset('VFPOLEDB',

   'E:\VFP7Junk\Testdata.DBC';'Exclusive=No';'Data Source=DBC',

   'Delete from Customer where country = "Spain" ') 

go

declare @delerror int

select @delerror = @@error

print ''

if @delerror != 7357 and @delerror != 0

            print  'Delete failed with error '+convert(varchar(5),@delerror)

else

            print 'Ignore the error above, the Delete succeeded'

go

 

--* Check to see that the records are deleted.

Select * from openrowset('VFPOLEDB',

'e:\vfp7junk\Testdata.dbc';'Exclusive=No';'Data Source=DBC',

'select * from customer where country = "Spain"')

go

 

 

--* Here are some examples using the VFP OLE DB Provider to create Linked Servers.

--* Using sp_addlinkedserver to create the Linked Server.

sp_addlinkedserver @server='VFP_Linked_Server',

@srvproduct='Microsoft Visual FoxPro OLE DB Provider', 

@provider='VFPOLEDB',

@datasrc = 'E:\vfp7junk'

go

 

SELECT *

FROM OPENQUERY([VFP_Linked_Server], 'select * from customer where city = "Seattle"')

go

 

 

-- The Update command will update the table with the OPENQUERY function when using the 

-- linked server, but the same error 7357 error will occur.

select * from

 OPENQUERY([VFP_Linked_Server],

   'Update Customer Set city = "SEATTLE" where region = "WA" ') 

go

declare @upderror int

select @upderror = @@error

print ''

if @upderror != 7357 and @upderror != 0

            print  'Update failed with error '+convert(varchar(5),@upderror)

else

            print 'Ignore the error above, the Update succeeded'

go

 

 

-- Check and see if the City field is all uppercase with "SEATTLE".

SELECT *

FROM OPENQUERY([VFP_Linked_Server], 'select * from customer where region = "WA"')

go

 

--* Let's check for how many records have the word "London" in the City field.

SELECT *

FROM OPENQUERY([VFP_Linked_Server], 'select * from customer where city = "London"')

go

 

-- We can also use the Delete command to remove records with the OPENQUERY function when using the 

-- linked server, but the same error 7357 error will occur.

select * from

 OPENQUERY([VFP_Linked_Server],

   'Delete from Customer where city = "London"') 

go

declare @delerror int

select @delerror = @@error

print ''

if @delerror != 7357 and @delerror != 0

            print  'Delete failed with error '+convert(varchar(5),@delerror)

else

            print 'Ignore the error above, the Delete succeeded'

go

 

 

/* SP_addlinkedserver example with DSN-less connection */

 

/* This example also depends on the sample files Testdata.dbc

Modify your code accordingly for differences in location or DBC name */

 

sp_addlinkedserver 'VFP Testdata Database With No DSN',

    '',

    'MSDASQL',

    NULL,

    NULL,

'Driver={Microsoft Visual FoxPro Driver};UID=;PWD=;SourceDB=e:\VFP8junk\Testdata.dbc;SourceType=DBC;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;'

go

 

 

SELECT *

FROM OPENQUERY([VFP Testdata Database With No DSN], 'select * from customer where country = "USA" order by country')

go

Referências

Para obter mais detalhes sobre como configurar e usando consultas distribuídas, dê uma olhada no sp_addlinkedserver, OpenQuery, OpenRowset e tópicos relacionados nos manuais online do SQL 7.0.

Para saber mais sobre FoxPro e arquivos .dbf e .dbc, consulte a documentação do produto do FoxPro.

A informação contida neste artigo aplica-se a:
  • Microsoft Visual FoxPro 3.0 Standard Edition
  • Microsoft Visual FoxPro 3.0b Standard Edition
  • Microsoft Visual FoxPro 5.0 Standard Edition
  • Microsoft Visual FoxPro 5.0a
  • Microsoft Visual FoxPro 6.0 Professional Edition
  • Microsoft Visual FoxPro 7.0 Professional Edition
  • Microsoft Visual FoxPro 8.0 Professional Edition
  • Microsoft Visual FoxPro 9.0 Professional Edition
  • Microsoft SQL Server 2000 Standard Edition
Palavras-chave: 
kbmt kbdatabase kbhowto KB207595 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Caso venha a encontrar erros neste artigo e queira colaborar no processo de aperfeiçoamento desta ferramenta, por favor preencha o formulário existente na parte inferior desta página. Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 207595  (http://support.microsoft.com/kb/207595/en-us/ )

Traduções deste artigo