Pasar informacion de Access a SQL
Tengo un problema y es el siguiente: Tengo dos tablas en access, una tengo el encabezado de la factura y en la otra el detalle de dicha factura, necesito pasar esto a SQL, pero no me funciona, ejemplo, si quiero pasar tres facturas el pgm me pasa las tres facturas pero luego de esto me pasa dos del las tres y luego una de las dos. ejemplo mas detallado, tengo las facturas 125,126 y 127, ella me las pasa pero luego me pasa la 125 y 126 y luego de eso me pasa la 127.
En detalle el codigo es el siguiente: { =============== } { CAPTURA DEPOSIT } // Lista!!! { =============== } {$REGION 'CAPTURA DEPOSIT'} procedure grabatrans_deposit; var xsol : iDepositAdd; // Comando xDepositLineAdd : iDepositLineAdd; i,xregistros : Integer; xid : String; begin // SOLICITUD DE INCLUSION xmensaje.ClearRequests; xsol := xmensaje.AppendDepositAddRq; // Tablas DMConexion.Destino1.Close; DMConexion.Destino1.TableName := 't5_deposit'; DMConexion.Destino1.Open; xregistros := 0; while not DMConexion.Destino1.Eof do begin if DMConexion.Destino1.FieldByName('CashBackInfoRetAccRefFullName').AsVariant<>null then xsol.CashBackInfoAdd.AccountRef.FullName.SetValue(DMConexion.Destino1.FieldByName('CashBackInfoRetAc cRefFullName').AsString); if DMConexion.Destino1.FieldByName('CashBackInfoRetAmount').AsVariant<>null then xsol.CashBackInfoAdd.Amount.SetValue(DMConexion.Destino1.FieldByName('CashBackInfoRetAmount').AsFloa t); if DMConexion.Destino1.FieldByName('CashBackInfoRetMemo').AsVariant<>null then xsol.CashBackInfoAdd.Memo.SetValue(DMConexion.Destino1.FieldByName('CashBackInfoRetMemo').AsString); // DMConexion.Destino1.FieldByName('CashBackInfoRetTxnLineID').AsString := x_iDepositRetList.GetAt(i).CashBackInfoRet.TxnLineID.GetValue; // DMConexion.Destino1.FieldByName('CashBackInfoRettype_').AsInteger := x_iDepositRetList.GetAt(i).CashBackInfoRet.type_.GetValue; if DMConexion.Destino1.FieldByName('DepositToAccountRefFullName').AsVariant<>null then xsol.DepositToAccountRef.FullName.SetValue(DMConexion.Destino1.FieldByName('DepositToAccountRefFullN ame').AsString); // DMConexion.Destino1.FieldByName('DepositTotal').AsFloat := x_iDepositRetList.GetAt(i).DepositTotal.GetValue; if DMConexion.Destino1.FieldByName('Memo').AsVariant<>null then xsol.Memo.SetValue(DMConexion.Destino1.FieldByName('Memo').AsString); if DMConexion.Destino1.FieldByName('TxnDate').AsVariant<>null then xsol.TxnDate.SetValue(DMConexion.Destino1.FieldByName('TxnDate').AsDateTime); // DMConexion.Destino1.FieldByName('TxnID').AsString := x_iDepositRetList.GetAt(i).TxnID.GetValue; // DMConexion.Destino1.FieldByName('TxnNumber').AsInteger := x_iDepositRetList.GetAt(i).TxnNumber.GetValue; // DMConexion.Destino1.FieldByName('type_').AsInteger := x_iDepositRetList.GetAt(i).type_.GetValue; // falta es lista: x_iDepositRetList.GetAt(i).DataExtRetList.Count-1 do // ********************** // *** LINEAS DETALLE *** // ********************** // DMConexion.q.Create(nil); // dmConexion.q.Create(dmConexion); DMConexion.q.Connection:= dmConexion.Base2; //- dmConexion.q.SQL.Create; dmConexion.q.SQL.Clear; DMConexion.q.Close; xid := Copy(DMConexion.Destino1.FieldByName('TxnID').AsString,(Pos('-',DMConexion.Destino1.FieldByName('TxnID').AsString)+1),100); xid := TrimRight(xid); DMConexion.q.SQL.Add('select * from t5_deposit_det where TxnLineID like "%'+xid+'%"'); DMConexion.q.Open; if not DMConexion.q.IsEmpty then Begin while not DMConexion.q.Eof do begin xDepositLineAdd := xsol.DepositLineAddList.Append; if DMConexion.q.FieldByName('AccountRefFullName').AsVariant<>null then xDepositLineAdd.ORDepositLineAdd.DepositInfo.AccountRef.FullName.SetValue(DMConexion.q.FieldByName(' AccountRefFullName').AsString); if DMConexion.q.FieldByName('Amount').AsVariant<>null then xDepositLineAdd.ORDepositLineAdd.DepositInfo.Amount.SetValue(DMConexion.q.FieldByName('Amount').AsFl oat); if DMConexion.q.FieldByName('CheckNumber').AsVariant<>null then xDepositLineAdd.ORDepositLineAdd.DepositInfo.CheckNumber.SetValue(DMConexion.q.FieldByName('CheckNum ber').AsString); if DMConexion.q.FieldByName('ClassRefFullName').AsVariant<>null then xDepositLineAdd.ORDepositLineAdd.DepositInfo.ClassRef.FullName.SetValue(DMConexion.q.FieldByName('Cl assRefFullName').AsString); if DMConexion.q.FieldByName('EntityRefFullName').AsVariant<>null then xDepositLineAdd.ORDepositLineAdd.DepositInfo.EntityRef.FullName.SetValue(DMConexion.q.FieldByName('E ntityRefFullName').AsString); if DMConexion.q.FieldByName('Memo').AsVariant<>null then xDepositLineAdd.ORDepositLineAdd.DepositInfo.Memo.SetValue(DMConexion.q.FieldByName('Memo').AsString ); if DMConexion.q.FieldByName('PaymentMethodRefFullName').AsVariant<>null then xDepositLineAdd.ORDepositLineAdd.DepositInfo.PaymentMethodRef.FullName.SetValue(DMConexion.q.FieldBy Name('PaymentMethodRefFullName').AsString); // xDepositLineAdd.ORDepositLineAdd.DepositInfo.TxnID.SetValue(DMConexion.q.FieldByName('TxnID').AsStri ng); // xDepositLineAdd.ORDepositLineAdd.DepositInfo.TxnLineID.SetValue(DMConexion.q.FieldByName('TxnLineID' ).AsString); // xDepositLineAdd.ORDepositLineAdd.DepositInfo.TxnType.SetValue(DMConexion.q.FieldByName('TxnType').As String); DMConexion.q.Next; end; //- dmConexion.q.Destroy; // *************** // HACE EL REQUEST // *************** xresponseSet := nil; // Limpia Respuestas xresponseSet := xSessionManager.DoRequests(xmensaje); // Ejecuta la Solicitud xresponse := xResponseSet.ResponseList.GetAt(0); //DMConexion.q.Close; End; if xresponse.StatusCode <> 0 then FMain.Memo1.Lines.Add('ERROR: Exportando Transacciones Deposit'+#13#10+ StringOfChar(' ',11)+'STATUS CODE: '+IntToStr(xresponse.StatusCode)+ ' SEVERITY: '+xresponse.StatusSeverity+#13#10+ StringOfChar(' ',11)+'MESSAGE: '+xresponse.StatusMessage+#13#10) else Inc(xregistros); if xregistros<3 then begin DMConexion.Destino1.Next; end else DMConexion.Destino1.Close; end; FMain.Memo1.Lines.Add(IntToStr(xregistros)+' Registros de: Transacciones Deposit transferidos...'); FMain.Memo1.Lines.Add(StringOfChar('=',55)); Application.ProcessMessages; end; {$ENDREGION} Cualquier cosa me pueden mandar una sugerencia al siguiente correo: jorozco1000@hotmail.com Gracias Amigos |
Dentro del administrador corporativo del SQL, en herramientas, existe la opcion de importar y exportar datos. Mejor usa esas opciones y te simplificas toda la historia de migrar con codigos.
Otra alternativa es que utilices el comando BCP que corre en modo consola y del cual puedes filtrar los registros y campos que desees. LLevandolos primero a archivos planos y de ahi los sube a SQL en un abrir y cerrar de ojos. Por ejem. El otro dia migre con este comando 280000 registros en menos de 5 segundos y los subi a la tabla que queria en menos de 15 segundos incluida la validacion d constraints y claves |
La franja horaria es GMT +2. Ahora son las 23:57:59. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi