CanonTG Posted April 9, 2014 Report Share Posted April 9, 2014 (edited) Boas, ao tentar adicionar um pdf á minha base de dados dá este erro "Cannot open file “C:\Users\Catia.Lopes\Desktop\3Semana.pdf” o processo não pode aceder ao ficheiro porque este está a ser utilizado por outro processo" alguém sabe o que se passa? No edit3 tenho o caminho para o ficheiro seleccionado Query.Insert; Query.FieldByName('nOportunidade').AsInteger :=maior; Query.FieldByName('nomeOport').AsString :=Edit6.Text; Query.FieldByName('username').AsString :=Edit2.Text; Query.FieldByName('data').AsDateTime :=Date(); Query.FieldByName('hora').AsDateTime :=Time; Query.FieldByName('nomeArq').AsString := nomeArquivoOport; Query.FieldByName('observacoes').AsString :=Memo1.Text; //add ficheiro blob blob := Query.CreateBlobStream(Query.FieldByName('anexos'), bmWrite);try blob.Seek(0, soFromBeginning); try blob.CopyFrom(TFileStream.Create(Edit3.Text, fmOpenRead), TFileStream.Create(Edit3.Text, fmOpenRead).Size) finally TFileStream.Create(Edit3.Text, fmOpenRead).Free end; finally blob.Free; end; Query.Post; Edited April 9, 2014 by CanonTG Link to comment Share on other sites More sharing options...
CrominhO Posted April 9, 2014 Report Share Posted April 9, 2014 (edited) Boas, ao tentar adicionar um pdf á minha base de dados dá este erro "Cannot open file “C:\Users\Catia.Lopes\Desktop\3Semana.pdf” o processo não pode aceder ao ficheiro porque este está a ser utilizado por outro processo" alguém sabe o que se passa? No edit3 tenho o caminho para o ficheiro seleccionado Query.Insert; Query.FieldByName('nOportunidade').AsInteger :=maior; Query.FieldByName('nomeOport').AsString :=Edit6.Text; Query.FieldByName('username').AsString :=Edit2.Text; Query.FieldByName('data').AsDateTime :=Date(); Query.FieldByName('hora').AsDateTime :=Time; Query.FieldByName('nomeArq').AsString := nomeArquivoOport; Query.FieldByName('observacoes').AsString :=Memo1.Text; //add ficheiro blob blob := Query.CreateBlobStream(Query.FieldByName('anexos'), bmWrite);try blob.Seek(0, soFromBeginning); try blob.CopyFrom(TFileStream.Create(Edit3.Text, fmOpenRead), TFileStream.Create(Edit3.Text, fmOpenRead).Size) finally TFileStream.Create(Edit3.Text, fmOpenRead).Free end; finally blob.Free; end; Query.Post; Sim muito provavelmente ele não está a encontrar o ficheiro como o proprio erro diz, experimenta só a apontar o edit3.text para c:\teste.pdf, eu não sei se tens o nome do ficheiro ficheiro ou nao, mas suponho que sim, em todo o caso coloca-o em C:\ e testa por favor. Edited April 9, 2014 by CrominhO As mentes humanas são realmente um local estranho! Link to comment Share on other sites More sharing options...
I-NOZex Posted April 9, 2014 Report Share Posted April 9, 2014 nao graves dados binarios na bd... é um conselho valioso que te dou! guarda a localizaçao apenas B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net Link to comment Share on other sites More sharing options...
CrominhO Posted April 9, 2014 Report Share Posted April 9, 2014 (edited) nao graves dados binarios na bd... é um conselho valioso que te dou! guarda a localizaçao apenas Mas porquê? tirando o facto da BD ficar obviamente maior, existe mais alguma razão ? 🙂 Edited April 9, 2014 by CrominhO As mentes humanas são realmente um local estranho! Link to comment Share on other sites More sharing options...
I-NOZex Posted April 9, 2014 Report Share Posted April 9, 2014 db maior, logo, queries mais lentas... acredita, nao existem praticamente vantagens! e o acesso aos dados é mais complicado... so traz problemas! xD B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net Link to comment Share on other sites More sharing options...
CrominhO Posted April 9, 2014 Report Share Posted April 9, 2014 db maior, logo, queries mais lentas... acredita, nao existem praticamente vantagens! e o acesso aos dados é mais complicado... so traz problemas! xD Eu acredito amigo 🙂 aliás todos nós aprendemos que isso não deve ser feito 🙂 mas como cada vez mais as Aplicações estão viradas para a web há alturas que não da mesmo para evitar. Eu só perguntei, porque por exemplo MySql + JPG gravado no PhotoShop dá logo Erro 51, pensei que pudesse haver aí alguma coisa com PDFs que eu não soubesse 🙂 As mentes humanas são realmente um local estranho! Link to comment Share on other sites More sharing options...
CanonTG Posted April 10, 2014 Author Report Share Posted April 10, 2014 (edited) Só colocando o C:\ e nome do ficheiro da erro que não consegue localizar o ficheiro. E se eu colocar o ficheiro no C:\ dá o erro inicial Pois mas eu tenho mesmo de guardar os ficheiros Edited April 10, 2014 by CanonTG Link to comment Share on other sites More sharing options...
CrominhO Posted April 10, 2014 Report Share Posted April 10, 2014 Só colocando o C:\ e nome do ficheiro da erro que não consegue localizar o ficheiro. E se eu colocar o ficheiro no C:\ dá o erro inicial Pois mas eu tenho mesmo de guardar os ficheiros Oi Canon, eu não consigo ver as variáveis que criaste e também te faltava criar o Stream, experimenta lá assim por favor, procedure TForm1.SavetoBlobClick(Sender: TObject); var blob: TBlobStream; TempStrm: TMemoryStream; begin // cria o Blob blob := Query.CreateBlobStream(Query.FieldByName('anexos'), bmWrite); try // aponta para o inicio blob.Seek(0, soFromBeginning); // cria o bloco de memória TempStrm := TMemoryStream.Create; // le PDF gtPDFDocument1.LoadFromFile('C:\Input.pdf'); // salva PDF para bloco de memoria gtPDFDocument1.SaveToStream(TempStrm); // vai para o inicio do bloco TempStrm.Position := 0; // copia do Bloco para o Blob try blob.CopyFrom(TempStrm, TempStrm.Size) finally TempStrm.Free end; finally blob.Free end; end; As mentes humanas são realmente um local estranho! Link to comment Share on other sites More sharing options...
CanonTG Posted April 10, 2014 Author Report Share Posted April 10, 2014 (edited) Eu resolvi com este código var FileStream: TFileStream; BlobStream: TStream; begin Query.Insert; Query.FieldByName('nOportunidade').AsInteger :=maior; Query.FieldByName('nomeOport').AsString :=Edit6.Text; Query.FieldByName('username').AsString :=Edit2.Text; Query.FieldByName('data').AsDateTime :=Date(); Query.FieldByName('hora').AsDateTime :=Time; Query.FieldByName('observacoes').AsString :=Memo1.Text; //add ficheiro blob if(Edit3.Text <> '') then begin BlobStream := Query.CreateBlobStream(Query.FieldByName('anexos'),bmWrite); FileStream := TFileStream.Create(Edit3.Text ,fmOpenRead or fmShareDenyNone); BlobStream.CopyFrom(FileStream,FileStream.Size); FileStream.Free; BlobStream.Free; end; Query.Post; end Agora não estou a conseguir é editar o campo blob, tens alguma ideia? Edited April 10, 2014 by CanonTG Link to comment Share on other sites More sharing options...
CrominhO Posted April 10, 2014 Report Share Posted April 10, 2014 Eu resolvi com este código Agora não estou a conseguir é editar o campo blob, tens alguma ideia? Ok, ainda bem. Eu não percebi o que queres dizer com "Editar", alterar depois de introduzir? Que eu saiba não dá, esse Campo dá para ler e para escrever, se depois de Leres quiseres alterar, tens de voltar a introduzir como fizeste na Introdução. As mentes humanas são realmente um local estranho! Link to comment Share on other sites More sharing options...
CanonTG Posted April 10, 2014 Author Report Share Posted April 10, 2014 Sim é alterar, eu já tentei mas não consigo introduzir num sítio especifico e eu altero mais dados para além do blob Link to comment Share on other sites More sharing options...
CrominhO Posted April 10, 2014 Report Share Posted April 10, 2014 (edited) Sim é alterar, eu já tentei mas não consigo introduzir num sítio especifico e eu altero mais dados para além do blob Tás a fazer Query.Edit e Query.Post ? 🙂 é que isto só funciona se tiveres uma chave na tabela para ele saber onde está o "cursor", ele da-te erro se tentares fazer ? Query.Edit; Query.FieldByName('username').AsString :=' novo teste'; Query.Post; Edited April 10, 2014 by CrominhO As mentes humanas são realmente um local estranho! Link to comment Share on other sites More sharing options...
CanonTG Posted April 10, 2014 Author Report Share Posted April 10, 2014 A chave da minha tabela é o conjunto de 3 campos, vou experimentar. Antes de Query.edit tenho de fazer um Query.sql.text=''; para dizer a linha certo? Link to comment Share on other sites More sharing options...
CrominhO Posted April 10, 2014 Report Share Posted April 10, 2014 Sim exactamente, se não tiveres uma DBgrid ou algo que te diga em que registo estás, tens de fazer uma Query 🙂 e depois da tabela aberta é que podes editar 🙂 As mentes humanas são realmente um local estranho! Link to comment Share on other sites More sharing options...
CanonTG Posted April 10, 2014 Author Report Share Posted April 10, 2014 (edited) não existem informações suficientes sobre a coluna chave para actualizar dá este erro //atualizar as fasesoportunidades Query1.SQL.Clear; Query1.SQL.Add('UPDATE fasesoportunidades SET observacoes='''+Memo1.Text+''', ' +'nomeArq='''+nomeArquivoF+''' ' +'where nOportunidade='''+Edit9.Text+''' and nFase='''+Edit10.Text+''' '); Query1.ExecSQL; Query2.SQL.Clear; Query2.SQL.Text :='select anexos from fasesoportunidades where ' +'nOportunidade='''+Edit9.Text+''' and nFase='''+Edit10.Text+''' and codOC='''+Label6.Caption+''' '; Query2.Open; Query2.Edit; BlobStream := Query2.CreateBlobStream(Query2.FieldByName('anexos'),bmWrite); FileStream := TFileStream.Create(Edit8.Text ,fmOpenRead or fmShareDenyNone); BlobStream.CopyFrom(FileStream,FileStream.Size); FileStream.Free; BlobStream.Free; Query2.Post; Edited April 10, 2014 by CanonTG Link to comment Share on other sites More sharing options...
CanonTG Posted April 10, 2014 Author Report Share Posted April 10, 2014 já resolvi, mudei o select para seleccionar todos os componentes Link to comment Share on other sites More sharing options...
CrominhO Posted April 10, 2014 Report Share Posted April 10, 2014 tava a escrever, okis 🙂 1 Report As mentes humanas são realmente um local estranho! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now