cześć wszystkim, jestem tutaj nowy więc proszę mi wybaczyć jeśli napiszę o moim problemie nie tutaj gdzie trzeba. mam problem dotyczący generowania plików xml na podstawie wyniku jaki dostaje z bazy danych. kilka dni temu sktypt działał bez zarzutu i nadal działa na systemie windows 2008 serwer i perlu "perl 5, version 16, subversion 3 (v5.16.3) built for MSWin32-x64-multi-thread". obecnie mam system Windows 2019 server i Strwberry perl 5.30. skryp zatrzymuje sie z błędem "Wide character at c:\laczev5\scripts\CreateAchiveXMLs_test1.pl line 521." nie mam pojęcia dlaczego. może ktoś jest mądrzejszy ode mnie a na pewno tak jest i podpowie co zmienić aby było ok. poniżej skrypt:
use strict;
use warnings;
use Encode;
use XML::Writer;
use IO::File;
use File::Copy;
use Win32::SqlServer qw (LIST);
use File::Basename;
use File::Path qw/make_path/;
our $sesID = shift(@argv);
if(!$sesID){
$sesID = "";
}
my $serwerArchiwum = '//10.170.1.139/C$';
my $serwerArchiwumAlt = '\\10.170.1.211\C$\out_archiwum_out_prod\Poczekalnia_archiwum\convert_test\';
my $serwerRobotRenia2 = '//kr-files/Centrum_Wydruku/EDO/JR0809/PDF_August';
my $serwerMikroinstalacje = '//tpe.corp/zasoby/Foldery-sieciowe/T-OK/BW-ROBOTY/PDF-OUT-Mikroinstalacje';
my $serwerMikroinstalacje_R = '//tpe.corp/zasoby/Foldery-sieciowe/T-OK/BW-ROBOTY/PDF-OUT-Mikroinstalacje_Polecone';
my $serwerRKU = '//10.170.1.211/C$/out_archiwum_out_prod/Poczekalnia_archiwum/XML/RKU_XML';
my $serwerWymianaLicznika = '//tpe.corp/zasoby/Foldery-sieciowe/T-OK/BW-ROBOTY/PDF-OUT-Wymiana-Licznika/';
laczymy sie z baza danych
my $sqlsrv = new Win32::SqlServer;
$sqlsrv->setloginproperty('Server', 'GK-SQLPMAS01V\GKSQLPMAS');
$sqlsrv->setloginproperty('Database', 'LaczeV5');
$sqlsrv->setloginproperty('Username', 'ic');
$sqlsrv->setloginproperty('Password', 'ic');
$sqlsrv->{ErrInfo}{MaxSeverity} = 25;
$sqlsrv->{ErrInfo}{PrintMsg} = 25;
$sqlsrv->{ErrInfo}{PrintText} = 25;
$sqlsrv->{ErrInfo}{PrintLines} = 25;
$sqlsrv->{ErrInfo}{SaveMessages} = 1;
$sqlsrv->connect();
sprawdz czy nie bylo bledu przy polaczeniu z serwerem
my $hadErrors = 0;
my $errorDescription = "";
my $errorInfo = "";
foreach my $mess (@{$sqlsrv->{ErrInfo}{Messages}}) {
$errorInfo .= $mess->{Text}."\n";
}
if ($errorInfo ne "") {
chomp $errorInfo;
print "Błąd połączenia z bazą danych: " . $errorInfo;
exit(1);
}
SPRAWDZAMY DANE W BAZIE
0 PrzesylkaType
1 GUID
2 NumerNadania
3 DataNadania
4 Nazwa
5 Ulica
6 NumerDomu
7 NumerLokalu
8 Miejscowosc
9 KodPocztowy
10 IloscPotwierdzenOdbioru
11 EPO
12 NumerPlatnika
13 idEnvelope
14 TypDokumentu
15 Barkod
16 SystemZrodlowy
17 SciezkaDoPliku
18 NazwaPlikuPDF
#########################
my $SQL = <<'END_SQL';
SELECT * from (SELECT CASE WHEN typeID = 1 THEN 'przesylkaFirmowaPoleconaType'
WHEN typeID = 2 THEN 'przesylkaFirmowaPoleconaType'
WHEN typeID IS NULL OR NULLIF(DokumentNumerNadawczy,'') IS NULL THEN 'listZwyklyFirmowyType'
ELSE ''
END AS PrzesylkaType
,[guid] AS [GUID]
,DokumentNumerNadawczy AS NumerNadania
,CONVERT(VARCHAR(10),DokumentDataNadania,120) AS DataNadania
,DokumentOdbiorca AS Nazwa
,DokumentOdbiorcaAdres1 AS Ulica
,DokumentOdbiorcaAdres1 AS NumerDomu
,DokumentOdbiorcaAdres1 AS NumerLokalu
,DokumentOdbiorcaPoczta AS Miejscowosc
,DokumentOdbiorcaKod AS KodPocztowy
,CASE WHEN typeID = 2 THEN 1 ELSE 0 END AS IloscPotwierdzenOdbioru
,CASE WHEN typeID = 2 THEN 'true' ELSE 'false' END AS EPO
,DokumentOdbiorcaID AS NumerPlatnika
,envelopeID AS idEnvelope
,ISNULL(DokumentOpis,'') AS TypDokumentu2
,ZdarzenieSEQ AS Barkod
,CASE WHEN PlikOryginal LIKE '%EDO%' THEN 'T17'
WHEN PlikOryginal LIKE '%Odnawiacze%' and PlikOryginal LIKE '%AUMS%' THEN 'T18'
WHEN PlikOryginal LIKE '%Odnawiacze%' and (PlikOryginal LIKE '%TS%'or PlikOryginal LIKE '%GZE%') THEN 'T17'
WHEN PlikOryginal LIKE '%Przedluzacze%' and PlikOryginal LIKE '%AUMS%' THEN 'T18'
WHEN PlikOryginal LIKE '%Przedluzacze%' and (PlikOryginal LIKE '%TS%'or PlikOryginal LIKE '%EXP%')THEN 'T17'
WHEN PlikOryginal LIKE '%AUMS%' and PlikOryginal not LIKE '%D1%'THEN 'T18'
WHEN PlikOryginal LIKE '%AUMS%' and PlikOryginal LIKE '%D1%'THEN 'T21'
WHEN PlikOryginal LIKE '%Umowy_rez_EDO_JMochol_%' THEN 'T17'
WHEN PlikOryginal LIKE '%Umowy_rez_AUMS_JMochol_%' THEN 'T18'
When PlikOryginal LIKE '%P02ANK%' THEN 'T18'
When PlikOryginal LIKE '%TD-P01-%' THEN 'T18'
ELSE ''
END AS SystemZrodlowy
,NazwaPlikuPDF AS SciezkaDoPliku
,RIGHT(NazwaPlikuPDF, CHARINDEX('', REVERSE(NazwaPlikuPDF)) -1) AS NazwaPlikuPDF
,PlikID AS PlikID, dokumentopis, plikoryginal,
CASE WHEN (PlikOryginal LIKE '%EDO[]WIN[]TOK[]Z%WUM%') and (dokumentopis like 'WUM_JR6%' or dokumentopis like 'WUM_JR7%' or dokumentopis like 'WUM_JR8%' or dokumentopis like 'WUM_JR9%'
or dokumentopis like 'WUM_JR10%' or dokumentopis like 'WUM_JR11' or dokumentopis like 'WUM_JR12%' or dokumentopis like 'WUM_JR13%'
or dokumentopis like 'WUM_JR14%'or dokumentopis like 'WUM_JR15%' or dokumentopis like 'WUM_JR16%' or dokumentopis like 'WUM_JR17%')
THEN 'WINDYKACJA_WUM_TS'
WHEN (PlikOryginal LIKE '%EDO[]WIN[]TOK[]Z%WUM%') and (dokumentopis like 'WUM_JR1%' or dokumentopis like 'WUM_JR3%' or dokumentopis like 'WUM_JR38%' or dokumentopis like 'WUM_JR39%')
THEN 'WINDYKACJA_WUM_TSP'
WHEN (PlikOryginal LIKE '%EDO[]WIN[]TOK[]Z%WPS%') and (dokumentopis like '730' or dokumentopis like '930'
or dokumentopis like '1130' or dokumentopis like '1332' or dokumentopis like '1530' or dokumentopis like '1730')
THEN 'WINDYKACJA_WPS_EDO_TS'
WHEN (PlikOryginal LIKE '%EDO[]WIN[]TOK[]Z%WPS%') and (dokumentopis like '330' or dokumentopis like '3952' or dokumentopis like '3932')
THEN 'WINDYKACJA_WPS_EDO_TSP'
WHEN (PlikOryginal LIKE '%EDO[]WIN[]TOK[]Z%WPS%') and (dokumentopis like '431%' or dokumentopis like '3131%')
THEN 'WINDYKACJA_WPS_EDO_TD'
WHEN (PlikOryginal LIKE '%EDO[]WIN[]TOK[]Z%WPS%') and (PlikOryginal LIKE '%EDO[]WIN[]TOK[]Z%TD%') and (dokumentopis IS NULL)
THEN 'WINDYKACJA_WPS_SAP_TD'
WHEN PlikOryginal LIKE '%EDO[]WIN[]TOK[]Z%WUM%' THEN 'WINDYKACJA_WUM'
WHEN PlikOryginal LIKE '%EDO%' THEN 'EDO'
WHEN PlikOryginal LIKE '%Odnawiacze%' THEN 'OdnawiaczeMSP'
WHEN PlikOryginal LIKE '%Przedluzacze%' THEN 'Przedluzacze_GD'
WHEN PlikOryginal LIKE '%AUMS%' THEN 'AUMS'
WHEN PlikOryginal LIKE '%Umowy_rez_EDO_JMochol_%' THEN 'Energia_Bierna'
WHEN PlikOryginal LIKE '%Umowy_rez_AUMS_JMochol_%' THEN 'Energia_Bierna'
When PlikOryginal LIKE '%P02ANK%' THEN 'AUMS'
When PlikOryginal LIKE '%TD-P01-%' THEN 'AUMS'
ELSE ''
END AS TypDokumentu
,ROW_NUMBER() OVER (PARTITION BY PDF.DokumentID ORDER BY SEQ DESC) AS DokumentLicznik
,ZdarzenieCzas
,p.BillingID
,ZdarzenieID
FROM DokumentyNazwyPDF PDF
JOIN Dokumenty D ON D.DokumentID = PDF.DokumentID
JOIN Pliki P ON P.PlikID = D.DokumentPlikID
LEFT JOIN Zdarzenia Z ON PDF.SEQ = Z.Zdarzenieseq AND Z.ZdarzenieID = 2
LEFT JOIN EnvelopeRegistered ER ON ER.docID = D.DokumentID) as sub
WHERE DokumentLicznik = 1 and BillingID = 46147
END_SQL
#DokumentLicznik = 1 and
run query
my @result = doSQL($SQL . $sesID);
przygotowujemy pliki XML na podstawie wyników
foreach my $row (@result) {
my $orgXmlFilePath = $$row[17];
$orgXmlFilePath =~ s/\out_archiwum_out_prod\/out_archiwum_out_prod/Poczekalnia_archiwum/XML//;
#my @poczekalnia = split(///, $orgXmlFilePathRKU);
#$PoczekalniaPath =
$orgXmlFilePath =~ s///\/g;
#$orgXmlFilePath =~ s/\///;
my $RKUPATH = $$row[17];
my $xmlFilePath = $orgXmlFilePath;
$xmlFilePath =~ s/(C|c)\:/$serwerArchiwum/;
my $orgXmlFilePathRKU = $$row[21];
my $xmlFilePathRKU = $orgXmlFilePathRKU;
#$xmlFilePathRKU =~ s/(C|c)\:/$serwerRKU/;
my $nazwa_poczekalnia_XML = "";
unless (-e $xmlFilePath) {
$xmlFilePath = $orgXmlFilePath;
$xmlFilePath =~ s/(C|c)\:/$serwerArchiwumAlt/;
$nazwa_poczekalnia_XML = $serwerArchiwumAlt . basename($xmlFilePath);
}
# zmiana rozszerzenia na xml
$xmlFilePath =~ s/(pdf|PDF)$/xml/;
$nazwa_poczekalnia_XML =~ s/(pdf|PDF)$/xml/;
#print $xmlFilePath."\n";
#print $nazwa_poczekalnia_XML;
#print $xmlFilePath;
my $output = IO::File->new(">$nazwa_poczekalnia_XML") or die("umieram");
my $writer = XML::Writer->new(OUTPUT => $output, DATA_MODE => 1, DATA_INDENT => 2);
$writer->xmlDecl('UTF-8');
$writer->startTag('letter');
$writer->startTag('basic');
my $DATANADANIA;
if (defined($$row[0]) && $$row[0] eq"przesylkaFirmowaPoleconaType"){
$writer->startTag('letter_param');
$writer->dataElement('key', 'PrzesylkaType');
$writer->dataElement('value', convert($$row[0]));
$writer->endTag('letter_param');
if (defined($$row[13]) && $$row[13] ne "") {
$writer->startTag('letter_param');
$writer->dataElement('key', 'IdEnvelope');
$writer->dataElement('value', convert($$row[13]));
$writer->endTag('letter_param');
}
if (defined($$row[1]) && $$row[1] ne "") {
$writer->startTag('letter_param');
$writer->dataElement('key', 'GUID');
$writer->dataElement('value', trim(convert($$row[1])));
$writer->endTag('letter_param');
}
if (defined($$row[2]) && $$row[2] ne "") {
$writer->startTag('letter_param');
$writer->dataElement('key', 'NumerNadania');
$writer->dataElement('value', convert($$row[2]));
$writer->endTag('letter_param');
}
$writer->startTag('letter_param');
$writer->dataElement('key', 'Nazwa');
$writer->dataElement('value', convert($$row[4]));
$writer->endTag('letter_param');
$writer->startTag('letter_param');
$writer->dataElement('key', 'Ulica');
$writer->dataElement('value', convert($$row[5]));
$writer->endTag('letter_param');
$writer->startTag('letter_param');
$writer->dataElement('key', 'Miejscowosc');
$writer->dataElement('value', convert($$row[8]));
$writer->endTag('letter_param');
$writer->startTag('letter_param');
$writer->dataElement('key', 'KodPocztowy');
$writer->dataElement('value', convert($$row[9]));
$writer->endTag('letter_param');
$writer->comment('przesylkaPoleconaKrajowaType');
$writer->startTag('letter_param');
$writer->dataElement('key', 'PostRestante');
$writer->dataElement('value', 'false');
$writer->endTag('letter_param');
if (defined($$row[10]) && $$row[10] ne "") {
$writer->startTag('letter_param');
$writer->comment('dopuszczalne wartosci {0, 1}');
$writer->dataElement('key', 'IloscPotwierdzenOdbioru');
$writer->dataElement('value', $$row[10]);
$writer->endTag('letter_param');
}
$writer->startTag('letter_param');
$writer->comment('dopuszczalne wartosci {EKONOMICZNA, PRIORYTETOWA}');
$writer->dataElement('key', 'Kategoria');
$writer->dataElement('value', 'EKONOMICZNA');
$writer->endTag('letter_param');
$writer->startTag('letter_param');
$writer->comment('waga w gramach');
$writer->dataElement('key', 'Masa');
$writer->dataElement('value', '100');
$writer->endTag('letter_param');
if (defined($$row[11]) && $$row[11] ne "") {
$writer->startTag('letter_param');
$writer->comment('dopuszczalne wartosci {true, false}');
$writer->dataElement('key', 'EPO');
$writer->dataElement('value', convert($$row[11]));
$writer->endTag('letter_param');
}
$writer->startTag('letter_param');
$writer->comment('dopuszczalne wartosci {GABARYT_A, GABARYT_B}');
$writer->dataElement('key', 'Gabaryt');
$writer->dataElement('value', 'GABARYT_A');
$writer->endTag('letter_param');
$writer->comment('Wartości Dodatkowe');
$writer->startTag('letter_param');
$writer->dataElement('key', 'Barcode');
$writer->dataElement('value', convert($$row[15]));
$writer->endTag('letter_param');
if (defined($$row[13]) && $$row[13] ne "") {
$writer->startTag('letter_param');
$writer->dataElement('key', 'NumerKN');
$writer->dataElement('value', convert('KN/'.$$row[3].'/SWM/'.$$row[13]));
$writer->endTag('letter_param');
}
$writer->startTag('letter_param');
$writer->dataElement('key', 'SystemZrodlowy');
$writer->dataElement('value', convert($$row[16]));
$writer->endTag('letter_param');
$writer->startTag('letter_param');
$writer->dataElement('key', 'TypDokumentu');
$writer->dataElement('value', convert($$row[22]));
$writer->endTag('letter_param');
$writer->endTag('basic');
}
elsif (defined($$row[0]) && $$row[0] eq "listZwyklyFirmowyType"){
$writer->startTag('letter_param');
$writer->dataElement('key', 'PrzesylkaType');
$writer->dataElement('value', convert($$row[0]));
$writer->endTag('letter_param');
if (defined($$row[13]) && $$row[13] ne "") {
$writer->startTag('letter_param');
$writer->dataElement('key', 'IdEnvelope');
$writer->dataElement('value', convert($$row[13]));
$writer->endTag('letter_param');
}
$writer->startTag('letter_param');
$writer->dataElement('key', 'Nazwa');
$writer->dataElement('value', convert($$row[4]));
$writer->endTag('letter_param');
$writer->startTag('letter_param');
$writer->dataElement('key', 'Ulica');
$writer->dataElement('value', convert($$row[5]));
$writer->endTag('letter_param');
$writer->startTag('letter_param');
$writer->dataElement('key', 'Miejscowosc');
$writer->dataElement('value', convert($$row[8]));
$writer->endTag('letter_param');
$writer->startTag('letter_param');
$writer->dataElement('key', 'KodPocztowy');
$writer->dataElement('value', convert($$row[9]));
$writer->endTag('letter_param');
$writer->startTag('letter_param');
$writer->dataElement('key', 'PostRestante');
$writer->dataElement('value', 'false');
$writer->endTag('letter_param');
$writer->startTag('letter_param');
$writer->comment('waga w gramach');
$writer->dataElement('key', 'Masa');
$writer->dataElement('value', '100');
$writer->endTag('letter_param');
$writer->startTag('letter_param');
$writer->comment('dopuszczalne wartosci {GABARYT_A, GABARYT_B}');
$writer->dataElement('key', 'Gabaryt');
$writer->dataElement('value', 'GABARYT_A');
$writer->endTag('letter_param');
$writer->startTag('letter_param');
$writer->comment('dopuszczalne wartosci {EKONOMICZNA, PRIORYTETOWA}');
$writer->dataElement('key', 'Kategoria');
$writer->dataElement('value', 'EKONOMICZNA');
$writer->endTag('letter_param');
$writer->comment('Wartości Dodatkowe');
$writer->startTag('letter_param');
$writer->dataElement('key', 'Barkod');
$writer->dataElement('value', convert($$row[15]));
$writer->endTag('letter_param');
$writer->endTag('basic');
}
$writer->startTag('extendend');
if (defined($$row[3]) && $$row[3] ne "") {
$writer->startTag('letter_param');
$writer->dataElement('key', 'DataNadaniaNaKopercie');
$writer->dataElement('value', convert($$row[3]));
$DATANADANIA = convert($$row[3]);
$writer->endTag('letter_param');
}
if (defined($$row[12]) && $$row[12] ne "") {
$writer->startTag('letter_param');
$writer->dataElement('key', 'NumerPlatnika');
$writer->dataElement('value', trim($$row[12]));
$writer->endTag('letter_param');
}
$writer->endTag('extendend');
$writer->startTag('files');
$writer->emptyTag('file', path => $$row[17], name => $$row[18], id=>$$row[19]) ; # "file" or real file name?
$writer->endTag('files');
$writer->endTag('letter');
$output->close();
=pod
if ($orgXmlFilePath =~ /RENIA/) {
my $xmlRENIAFilePath = $orgXmlFilePath;
$xmlRENIAFilePath =~ s/(C|c):\out_archiwum_out_prod//;
$xmlRENIAFilePath =~ s/\///g;
$xmlRENIAFilePath =~ s/(pdf|PDF)$/xml/;
$xmlRENIAFilePath = $serwerRobotRenia2 .$xmlRENIAFilePath;
copy($xmlFilePath, $xmlRENIAFilePath);
}
if ($orgXmlFilePath =~ /Mikroinstalacje-/) {
my $xmlMikroFilePath = $orgXmlFilePath;
$xmlMikroFilePath =~ s/(C|c)\:\\out_archiwum_out_prod//;
$xmlMikroFilePath =~ s/\\/\//g;
$xmlMikroFilePath =~ s/(pdf|PDF)$/xml/;
$xmlMikroFilePath = $serwerMikroinstalacje .$xmlMikroFilePath;
copy($xmlFilePath, $xmlMikroFilePath);
}
if ($orgXmlFilePath =~ /Mikroinstalacje_R/) {
my $xmlMikroFilePath = $orgXmlFilePath;
$xmlMikroFilePath =~ s/(C|c)\:\\out_archiwum_out_prod//;
$xmlMikroFilePath =~ s/\\/\//g;
$xmlMikroFilePath =~ s/(pdf|PDF)$/xml/;
$xmlMikroFilePath = $serwerMikroinstalacje_R .$xmlMikroFilePath;
copy($xmlFilePath, $xmlMikroFilePath);
}
if ($orgXmlFilePath =~ /ANDARIEL/) {
my $xmlWymLiczFilePath = $orgXmlFilePath;
$xmlWymLiczFilePath =~ s/(C|c)\:\\out_archiwum_out_prod//;
$xmlWymLiczFilePath =~ s/\\/\//g;
$xmlWymLiczFilePath =~ s/(pdf|PDF)$/xml/;
my @WymLiczxml = split(/\\/, $orgXmlFilePath);
my $wymliczpath = $WymLiczxml[3];
$xmlWymLiczFilePath =$serwerWymianaLicznika.$wymliczpath;
#print $xmlWymLiczFilePath;
#$xmlWymLiczFilePath = $serwerWymianaLicznika.$xmlWymLiczFilePath;
copy($xmlFilePath, $xmlWymLiczFilePath);
}
=cut
if ($orgXmlFilePath =~ /RKU/) {
my $xmlRKUFilePath = $orgXmlFilePath;
$xmlRKUFilePath =~ s/(C|c):\out_archiwum_out_prod//;
$xmlRKUFilePath =~ s/\///g;
$xmlRKUFilePath =~ s/(pdf|PDF)$/xml/;
$xmlRKUFilePath = $serwerRKU .$xmlRKUFilePath;
$orgXmlFilePathRKU =~ s/\///g;
$orgXmlFilePathRKU =~ s/(pdf|PDF)$/xml/;
#copy($xmlFilePath, $xmlRKUFilePath);
my @RKU = split(/\\/, $RKUPATH);
my @RKUxml = split(/\//, $orgXmlFilePathRKU);
my $nazwaPDFnaXML = $RKUxml[5];
$nazwaPDFnaXML =~ s/(pdf|PDF)$/xml/;
my $ZmianaNazwy = $serwerRKU.'/'.$RKU[2].'/'.$RKU[3];
my $nazwaPDFnaXML1 = $RKU[4];
$nazwaPDFnaXML1 =~ s/(pdf|PDF)$/xml/;
my $NamePDFOUT = $RKU[4];
#print $serwerRKU.'/'.$RKU[2].'/'.$RKU[3].'/'.$nazwaPDFnaXML1;
#print $orgXmlFilePathRKU."\n";
open (FF, '<', $orgXmlFilePathRKU);
open (FF1, ">", $serwerRKU.'/'.$nazwaPDFnaXML1)or die("cannot access savefile!");
while (my $linia =<FF>){
my $temp = "<DataNadania>".$DATANADANIA."<\/DataNadania>";
$linia =~ s/<DataNadania\/><\/RKU><\/xmlRecord>/$temp<NamePDFOUT>$NamePDFOUT<\/NamePDFOUT><\/RKU><\/xmlRecord>/g ;
# print $linia;
print FF1 $linia;
}
close(FF);
close(FF1);
# rename($ZmianaNazwy.'/'.$nazwaPDFnaXML, $ZmianaNazwy.'/'.$nazwaPDFnaXML1);
}
}
sprawdź czy nie było błędów
if ($hadErrors == 1) {
print "Wystąpiły błędy podczas pobierania danych z bazy: " . $errorDescription;
exit(1);
}
sub doSQL {
my $sql = shift;
my @vals = {};
my $stmnt = <<SQLEND;
$sql
SQLEND
if ($sql =~ /^SELECT/) {
@vals = $sqlsrv->sql($stmnt, LIST);
} else { # if INSERT or UPDATE or DELETE...
$sqlsrv->sql($stmnt, LIST);
}
my $errorInfo = "";
# Check for messages.
foreach my $mess (@{$sqlsrv->{ErrInfo}{Messages}}) {
$errorInfo .= $mess->{Text}."\n";
}
if ($errorInfo ne "") {
chomp $errorInfo;
print $sql."\n";
print "WARNING! Data error in line: $_\n".$errorInfo."\n";
$errorDescription .= $errorInfo."\n".$sql."\n\n";
$hadErrors = 1;
delete $sqlsrv->{ErrInfo}{Messages};
}
return @vals;
}
sub convert {
return encode_utf8(decode('CP-1250', $_[0]));
}
sub trim {
$[0]=~s/^\s+//;
$[0]=~s/\s+$//;
return $_[0];
}
######### PRZYKŁAD WYNIKU
=DEPENDENCIES: XML-Writer, XML-LibXML
PRZYKŁAD: