Kolega L. mi zadanie zlecił, w którym wykorzystywaną bazą musi być MS SQL. Podchodziłem do tego jak do jeża, ale wreszcie się przełamałem, usiadłem i działa (aż dziwne). W skład zadania wchodzi też baza danych pn. GraphiPlus
, która zawiera m.in. tabele o nazwach dbo.FACTURES
oraz dbo.SOCIETES
:
#!/usr/bin/perl use strict; use utf8; use DBI; require DBD::ODBC; my $serverN = 'E5410-KOMPUTER\\SQLEXPRESS'; my $baseN = 'GraphiPlus'; my $dsN = "GraphiPlus"; ## Obie formy działają (pierwsza przez DSN = Data Source Name/Źródło danych) ## Definiowanie DSN: Panel_Sterowania→Wszystkie_Elementy→ ## Narzędzia_Administracyjne→Źródła_danych_(ODBC) # my $dbh = DBI->connect("dbi:$dsN", '<UID>', '<PASSWD>', # { RaiseError => 1 } ) or die DBI->errstr; # Albo my $dbh = DBI->connect("dbi:ODBC:driver={SQL Server};Server=$serverN;database=$baseN;uid=<UID>;pwd=<PASSWD;", {RaiseError => 1, } ) or die DBI->errstr; print "*** Połączono z $baseN ***\n"; ## małe litery do.TABELA są istotne! my $sth = $dbh->prepare("SELECT * FROM dbo.FACTURES ") || die "ERROR" . $dbh->errstr ; $sth ->execute(); print "**** Tabela FACTURES:\n"; while ( my @invoiceRecord = $sth->fetchrow_array() ) { print (join(";", @invoiceRecord) . "\n"); } ## musi być (w mySQL niekoniecznie) $sth->finish(); print "**** Tabela SOCIETESS:\n"; my $sth = $dbh->prepare("SELECT * FROM dbo.SOCIETES ") || die "ERROR" . $dbh->errstr ; $sth ->execute(); while ( my @invoiceRecord = $sth->fetchrow_array() ) { print (join(";", @invoiceRecord) . "\n"); } $sth->finish(); $dbh->disconnect(); ###
Gdybym nie znał nazw tabel to można je ustalić albo za pomocą SQL Server Management Studio, albo wykonując polecenie SELECT
na systemowej tabeli pn. sys.tables
:
my $sts = $dbh->prepare("SELECT name FROM sys.tables ") || die "ERROR" . $dbh->errstr ;
Brak komentarzy:
Prześlij komentarz