Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-09-2012
sidneyb sidneyb is offline
Miembro
 
Registrado: nov 2007
Posts: 53
Poder: 17
sidneyb Va por buen camino
problema com un xml

Buen dia amigos, espero me puedan ayudar con el siguiente inconveniente

Tengo un programa en visual, este genera un xml a partir de un .DBF (codigos de barra y demas datos como descripcion del producto) para luego enviarlo a un procedimiento almacenado en un servidor SQLServer2005. este comprueba que lo contenido de la tabla DBF exista dentro de la tabla inventario del programa, el procedimiento almacenado me devuelve como resultado una lista con los codigos de barras que debo crear.

He intentado recrear solo este procedimiento dentro de un pequeño ejecutable en Delphi (leer el DBF, crear el xml y ejecutar el procedimiento almacenado con los datos del xml)

Uds me diran, por que no copio y pego y creo el mismo procedimiento de visual... el detalle esta en que aca se quiere eliminar la VB, sobre todo por que esta escrito con VB6 (algo antiguo)

A lugar... he logrado crear el xml, pero al enviarlo al SP (Stored Procedure) me suelta un error.

Mi codigo (DELPHI) es este;

Código:
procedure TFormPrincipal.BtnValidarClick(Sender: TObject);
var
  Stream    : TStringStream;
  Nodo      : IXMLNode;

begin
  if FileExists('C:\Ziptemp\Movitran.DBF') = false then  //Archivo Movitran
  begin
    Showmessage('No Existe el archivo Movitran.dbf en la carpeta C:\Ziptemp');
    FormPrincipal.CloseQuery;
    Abort;
  end;

  Try //ejecuto la consulta en el dbf
    QueryDBF.Close;
    QueryDBF.SQL.Clear;
    QueryDBF.SQL.Text:='Select max(NumTra) as Numt, CodBarra, max(Nombre) as Nomb, ';
    QueryDBF.SQL.Add('sum(Cantidad) as Canti, max(Referencia) as Refer, max(Marca) as Marc ');
    QueryDBF.SQL.Add('from movitran.dbf GROUP BY CodBarra');
    QueryDBF.Open;
    if QueryDBF.Recordset = nil then Exit;
    Stream := TStringStream.Create('');
    try
      // creo el .xml
      QueryDBF.Recordset.Save(TStreamAdapter.Create(stream) as IUnknown, adPersistXML);
      Stream.Position := 0;
      XML.LoadFromStream(stream);
      //elimino un nodo que no me interesa; XML = Componente TXMLDocument
      XML.DocumentElement.ChildNodes.Delete('s:Schema');
      XML.SaveToFile('D:\prueba.xml');  //Esta linea es solo para ir viendo como va quedando el xml
    finally
      Stream.Free;
    end;
  Except
    On E: Exception do
      showmessage('Error al crear archivo de informacion del DBF');
  End;

  //try
    //aqui llamo al procedimiento almacenado
      //SPSQL = componente TADOStoredProc
    SPSQL.ProcedureName:='PROCESAR_MOVITRAN';
    SPSQL.Parameters.CreateParameter('@strXML',ftstring, pdinput,length(xml.XML.Text),xml.XML.Text);
    SPSQL.Parameters.CreateParameter('@strProceso', ftstring, pdinput, 50, 'COMPRAS');
    SPSQL.ExecProc; // aca es la linea que me da el error
  //except
  //  on E: Exception do
  //    ShowMessage('No se Puede Establecer Conexion al Servidor Sql con los datos suministrados');
  //end;
end;
el error que me da es

Error de análisis de XML 0xc00ce553 en la línea número 0, junto al texto XML ""

el codigo usado en VB6 es:

Código:
    Dim XMLDocumento As DOMDocument
    Dim schemaNode   As MSXML2.IXMLDOMNode
    Set XMLDocumento = New DOMDocument
    rcsMovArchivoExt.Save XMLDocumento, adPersistXML
    With XMLDocumento
        .setProperty "SelectionNamespaces", "xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'"
        Set schemaNode = .selectSingleNode("//s:Schema")
        With .documentElement
            .removeChild schemaNode
            .removeAttribute "xmlns:s"
            .removeAttribute "xmlns:dt"
        End With
    End With

    Dim xmlParametro As ADODB.Parameter
    With sqlComando
        .ActiveConnection = cnnConexion
        .CommandText = "PROCESAR_MOVITRAN"
        .CommandType = adCmdStoredProc
        .Parameters.Append .CreateParameter("@strXML", adVarChar, adParamInput, Len(XMLDocumento.xml), XMLDocumento.xml)
        .Parameters.Append .CreateParameter("@strProceso", adVarChar, adParamInput, 50, "COMPRAS")
        rcsPrendas.Open sqlComando, , adOpenDynamic, adLockOptimistic
    End With
en los archivos xml generados solo veo diferencia en las primeras lineas, que quizas es alli donde tengo el problema, les muestro

xml de delphi
Cita:
<?xml version="1.0" encoding="UTF-8"?>
-<xml xmlns:z="#RowsetSchema" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882">-
<rs:data>
{Aqui van mis datos}
</rs:data>
</xml>
xml de VB6 es
Código:
<xml xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
    <rs:data>
    </rs:data>
</xml>
Si ven, hay una diferencia en las lineas donde estan los atributos, puede que sea aqui el problema... que puedo hacer para resolver el inconveniente?

gracias por la colaboracion que me puedan prestar
Responder Con Cita
  #2  
Antiguo 26-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner tus preguntas en el foro adecuado, lo has puesto en la nueva sección de "Trucos", algo que no tiene nada que ver.
Lo paso a "Varios".
Responder Con Cita
  #3  
Antiguo 26-09-2012
sidneyb sidneyb is offline
Miembro
 
Registrado: nov 2007
Posts: 53
Poder: 17
sidneyb Va por buen camino
gracias casimiro, veia si habia algo en trucos, honestamente no vi si publique alli
Responder Con Cita
  #4  
Antiguo 26-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cualquiera puede equivocarse
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:53:52.


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
Copyright 1996-2007 Club Delphi