sexta-feira, 21 de novembro de 2014

Missing Data Provider or Data Packet

Ontem um colaborador nosso ficou emperrado em um método para copiar dados de uma tabela 'A' de um banco origem para um banco destino usando o trio SQLQuery + DataSetProvider + ClientDataSet.

O metodo estava assim

procedure TForm1.CopiarDados(Origem, Destino: TSQLConnection;  NomeTabela: String);
Var
    QryOrigem, QryDestino: TSQLQuery;
    DtStPrvd : TDataSetProvider;
    CDS  : TClientDataSet;
begin
  QryOrigem := TSQLQuery.Create(nil);
  QryDestino := TSQLQuery.Create(nil);

  QryOrigem.SQLConnection := Origem;
  QryDestino.SQLConnection := Destino;

  DtStPrvd := TDataSetProvider.Create(nil)
  DtStPrvd.Name := 'DT';
  DTStPrvd.DataSet := Qry_Destino;

  CDS := TClientDataSet.Create(nil);
  CDS.PacketRecords := 1;
  CDS.ProviderName := DtStPrvd.Name;

  CDS.Open;   // Ao executar o open esta dando a mensagem 'Missing Data Provider or Data Packet '

  CDS.Free;
  DataSetProvider1.Free;
  QryOrigem.Free;
  QryDestino.Free;

end;

O erro estava na atribuicao do provider para o ClientDataSet. Para atribuir um provider em tempo de execucao para um ClientDataSet tem que usar o metodo SetProvider do ClientDataSet, ficando assim

CDS.SetProvider (DT);

Desta forma o Open do ClientDataSet funciona sem problema algum.








    
    



sexta-feira, 14 de novembro de 2014

Procurar um arquivo no Tablet/SmartPhone Android com o adb shell

Ontem (13/11/2014) precisava exportar todos os arquivos de uma pasta que estava dentro do tablet. Fiz um root para poder acessar o tablet via USB e para meu desespero estava impossível de achar a pasta com os seus respectivos arquivos. Tentei utilizar o find já que Android é um linux, mas não deu certo. Depois de algumas pesquisas encontrei na stackoverflow.com a solução para o meu problema.

No prompt de comando, na pasta onde está o adb.exe executei o comando abaixo;

adb shell ls -R / > ListaArquivos.Txt

Com esse comando foi criado um arquivo texto com o nome ListaArquivos.txt conforme abaixo

./mnt/sdcard/Ringtones:
hangout_ringtone.ogg
hangouts_incoming_call.ogg
hangouts_message.ogg
hangouts_video_call.ogg

(arquivo parcial)

Depois com essa informação foi só fazer um arquvo .bat para fazer a copia

Copiar.Bat

adb pull /mnt/sdcard/Ringtones/hangout_ringtone.ogg  c:\temp
adb pull /mnt/sdcard/Ringtones/hangouts_incoming_call.ogg c:\temp
adb pull /mnt/sdcard/Ringtones/hangouts_message.ogg c:\temp
adb pull /mnt/sdcard/Ringtones/hangouts_video_call.ogg c:\temp


Uma outra solução seria
adb pull  /mnt/sdcard/Ringtones/  # Copia todos os arquivos da pasta (a pasta tem que terminar com '/' )

Até mais.