Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
chevy
Зарегистрирован: 23.01.2006 Сообщения: 13 Откуда: Ижевск
|
Добавлено: Пн Янв 23 2006 15:16 Заголовок сообщения: MSSQL&Perl |
|
|
Через Perl подключаюсь к базе в MSSQL выполняю какой-нибудь запрос. После чего долго грузится и потом ничего не выдает, если нажимаешь остановить загрузку страницы, то показывает только часть той информации которая должна быть найдена.
Помогите решить проблемму.
Вот текст программы
Код: | $dbh = new Win32::ODBC("SERVER=$serv;Driver={Sql Server};DATABASE=$base;UID=$user;PWD=$pswd;");
формирование запроса
$dbh->Sql($zapros);
while($dbh->FetchRow())
{
%h = $dbh->DataHash();
print "<tr>
<td><a href=\"$about?id=$h{'kodstud'}&name=$h{'name'}&family=$h{'family'}&otch=$h{'otch'}\" class=Content target=main>$h{'family'}</a></td>
<td><a href=\"$about?id=$h{'kodstud'}&name=$h{'name'}&family=$h{'family'}&otch=$h{'otch'}\" class=Content target=main>$h{'name'}</a></td>
<td><a href=\"$about?id=$h{'kodstud'}&name=$h{'name'}&family=$h{'family'}&otch=$h{'otch'}\" class=Content target=main >$h{'otch'}</a></td>
<td><a href=\"$about?id=$h{'kodstud'}&name=$h{'name'}&family=$h{'family'}&otch=$h{'otch'}\" class=Content target=main >$h{'Ngroup'}</a></td>
</tr> ";
}
$dbh->Close(); |
|
|
Вернуться к началу |
|
|
Aragaer
Зарегистрирован: 28.03.2005 Сообщения: 164
|
Добавлено: Вт Янв 24 2006 01:52 Заголовок сообщения: |
|
|
А что такое DataHash?
Кажется, должен быть fetchrow_hashref, там уже жить было бы проще.
Ну и ...
Код: | print "<tr>\n". # начало символьной строки
(join '"", map # внешний join и внешний main
qq(\t<td><a href="$about?id=$h{kodstud}&).
(join "&", map "$_=$h{$_}", @plist). # простенький внутренний join+map, тут все должно быть понятно.
qq(" class=Content target=main>$h{$_}</a></td>\n),
(@plist, 'Ngroup')). # список аргументов, попадающих во внешний map, и конец внешнего join
"\t</tr>"; # конец символьной строки | , где Код: | @plist = qw(name family otch) |
Обожаю перл за его офигенные конструкции _________________ Open your eyes.
And Awaken. |
|
Вернуться к началу |
|
|
chevy
Зарегистрирован: 23.01.2006 Сообщения: 13 Откуда: Ижевск
|
Добавлено: Ср Янв 25 2006 09:31 Заголовок сообщения: |
|
|
FetchRow()+DataHash() - это тоже самое, что и fetchrow_hashref.
Предложенный вариант также не работает.
Если передавать только один параметр, например Ngroup, то работает без проблем, а если все четыре, то не работает.
Можно, конечно, передавать id, но тогда придется использовать дополнительный запрос в другую таблицу. |
|
Вернуться к началу |
|
|
Aragaer
Зарегистрирован: 28.03.2005 Сообщения: 164
|
Добавлено: Ср Янв 25 2006 11:23 Заголовок сообщения: |
|
|
Хмм... Кажется понял.
В том виде, в каком оно сейчас, при каждом проходе цикла происходит обращение к базе. Лучше сделать один запрос, а потом разбираться со всем вытащенным:
Код: | $sth = $dbh->prepare(запрос);
$sth->execute;
while($sth->fetchrow_array) {
...
} | Или я что-то неправильно понял? _________________ Open your eyes.
And Awaken. |
|
Вернуться к началу |
|
|
chevy
Зарегистрирован: 23.01.2006 Сообщения: 13 Откуда: Ижевск
|
Добавлено: Ср Янв 25 2006 14:58 Заголовок сообщения: |
|
|
Как я понимаю выполняет запрос, т.е. он аналогичен
Код: | $sth=$dbh->prepare($zapros);
$sth->execute(); |
|
|
Вернуться к началу |
|
|
chevy
Зарегистрирован: 23.01.2006 Сообщения: 13 Откуда: Ижевск
|
Добавлено: Ср Янв 25 2006 15:50 Заголовок сообщения: |
|
|
Все я нашел свою ошибку в формировании запроса. Я просто не искал в базе kodstud, который использовал при формировании ссылки. |
|
Вернуться к началу |
|
|
|