Inquiridor
openrowset

Pergunta
-
Pessoal, estou usando o openrowset para fazer algumas consultas em uma base de dados foxpro.
O exemplo abaixo, funciona perfeitamente:
select * from
openrowset('VFPOLEDB.1', 'C:\copyco_new\MOMDATA.DBC'; ' '; ' ',
'select * from stock where number="BC006"')Por outro lado, se eu tenho dar um update:
select * from
openrowset('VFPOLEDB.1', 'C:\copyco_new\MOMDATA.DBC'; ' '; ' ',
'Update stock set desc1= "Sun Screen 2" where number="BC006"')Eu recebo a seguinte mensagem de erro:
Could not process object 'Update stock set desc1= "Sun Screen 2" where number="BC006"'. The OLE DB provider 'VFPOLEDB.1' indicates that the object has no columns.
OLE DB error trace [Non-interface error: OLE DB provider unable to process object, since the object has no columnsProviderName='VFPOLEDB.1', Query=Update stock set desc1= "Sun Screen 2" where number="BC006"'].Usei como exemplo o artigo abaixo:
http://support.microsoft.com/kb/207595
--* 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" ')
Obrigado desde já pela ajuda.
Todas as Respostas
-
assim nao ____
select * from
openrowset('VFPOLEDB.1', 'C:\copyco_new\MOMDATA.DBC'; ' '; ' ',
'Update stock set desc1= "Sun Screen 2" where number="BC006"')
se vc. precisa dar um update, tente assim:
Update OPENDATASOURCE(provider, local, catalgo etc.)...Tabela
Set campo = novo_valor
where ...
segue exemplo para excel que tambem e jet.
Update OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Data Source="caminho\planilha.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...Sheet1$
set campo1 = 10
Abs;
mcolla@bol.com.br -
Marcelo, muito obrigado pela resposta.
Tentei exatamente oq vc falou:
UPDATE OPENDATASOURCE('VFPOLEDB.1','Data Source=''C:\copyco_new\MOMDATA.DBC''')...stock
set desc1= 'Sun Screen 2'
where number='BC006'
Mas recebo a mensagem de erro:
Could not fetch a row using a bookmark from OLE DB provider 'VFPOLEDB.1'.
[OLE/DB provider returned message: Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.]
OLE DB error trace [OLE/DB Provider 'VFPOLEDB.1' IRowsetLocate::GetRowsByBookmark returned 0x80040e21: 34000000].
Obrigado mais uma vez.
APJ -
APJ78,
Tente assim:
1 UPDATE OPENDATASOURCE([VFPOLEDB.1],'Data Source=''C:\copyco_new\MOMDATA.DBC''')...stock 2 set desc1= 'Sun Screen 2' 3 where number='BC006'
Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA -
Bom Dia,
Seu SQL Server é 2005 ? Se sim, recomendo tentar o seguinte:
DECLARE @CMDSQL VARCHAR(200) SET @CMDSQL = 'Update Stock Set Desc1 = "Sun Screen 2" WHERE Number = "BC006"' EXEC @CMDSQL AT [VFPOLEBD.1]
Outra possibilidade é criar uma View e realizar o UPDATE contra a View (CTEs também podem ser utilizadas) embora a instrução acima seja mais performática.
Estou recomendando, mas se a sugestão do Colla já retornou esses erros há uma grande chance de estar faltando alguma chave primária na tabela.
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com
Será que LEFT OUTER JOIN e RIGHT OUTER JOIN são sinôminos de *= e =* ?
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!422.entry
Classifique as respostas. O seu feedback é imprescindível -
-
-
Oi Junior.
Pertence ao foxpro.
Eu acabei de criar um código em c#, utilizando o mesmo provider (VFPOLEDB.1) para dar update no conteúdo:
OleDbConnection momDB;
momDB=
new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\copyco_new\\MOMDATA.DBC;Mode=Share Deny None;Extended Properties='';User ID='';Mask Password=False;Cache Authentication=False;Encrypt Password=False;Collating Sequence=MACHINE;DSN='';DELETED=True;CODEPAGE=1252;MVCOUNT=16384;ENGINEBEHAVIOR=90;TABLEVALIDATE=3;REFRESH=5;VARCHARMAPPING=False;ANSI=True;REPROCESS=5");
momDB.Open();OleDbCommand command =
new OleDbCommand("Update stock set desc1= 'Sun Screen test' where number='BC006'", momDB);command.ExecuteNonQuery();
momDB.Close();
Funcionou perfeitamente.
Só nao consigo fazer funcionar via Query Analyzer.
Obrigado por toda a ajuda até agora. -
Boa Noite,
Essa tabela tem índice ou chave primária na coluna Number ?
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com
Será que LEFT OUTER JOIN e RIGHT OUTER JOIN são sinôminos de *= e =* ?
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!422.entry
Classifique as respostas. O seu feedback é imprescindível -