Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление записей в SQL с непредсказуемым результ 
V
    Опции темы
Itsys
Дата 20.2.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



Есть следующий кусок кода:
Код

    open (LOG, ">$sitepath/Admin/log.txt");
    #Загрузим информацю из файла в БД
    if ($PARAMS{FileFormat} eq "xls"){
        #Загружаем информацию о товарах
        my $oFmtJ = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map => 'CP1251');
        my $excel = Spreadsheet::ParseExcel::Workbook->Parse("$sitepath/Admin/suppliers/Files/$PARAMS{SupplierId}.xls", $oFmtJ);
        my $sheet = $excel->{Worksheet}[0];
        foreach my $rownum ($PARAMS{HeaderLine} .. $sheet->{MaxRow}){
            print LOG $rownum. ": ";
            my @ColumsValues;
            foreach my $cellnum (@Columns){
                my $cell = $sheet->{Cells}[$rownum][$cellnum];
                if ($cell) {
                    my $Val = $oFmtJ->TextFmt($cell->{Val}, $cell->{Code});
                    $Val =~ s/'/`/g;
                    if ($Val){
                        push (@ColumsValues, "'$Val'");
                    }
                    else{
                        push (@ColumsValues, "''");
                    }
                }
                else{
                    push (@ColumsValues, "''");
                }
            }
            $query = "INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col" . (join(", Col" , @Columns)) . ") VALUES
                                                    ($PARAMS{SupplierId}, $PARAMS{GoodType}, $rownum, " . (join(", " , @ColumsValues)) . ")";
            print LOG "$query\n";
            if (!$SQLFastbook->do($query)){
                print "<span id=\"result\">" . $SQLFastbook->errstr . "<br>\n$query</span>\n";
                exit;
            }
            
            $query = "SELECT COUNT(*) AS CNT FROM SuppliersFileRows WHERE SupplierId = $PARAMS{SupplierId} AND GoodType = $PARAMS{GoodType}";
            my $sth = $SQLFastbook->prepare($query);
            $sth->execute || die "~~" . $sth->errstr . "<br>\n" . $query;
            my $count = $sth->fetchrow_hashref;
            print LOG "COUNT(*) = $$count{CNT}\n";
        }
    }
    close (LOG);

Перед выполнение кода таблица SuppliersFileRows очищается DELET-ОМ

Проблема следующая: при отрабатывании скрипта 
1. добавляется по две строки на каждый INSERT
2. при проверки COUNT(*) начало каждый раз разное на одном и том же файле пример логов:

Лог №1
Код

1: INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 1, '985-6503-82-5', '600348', '', 'Религия.Иоанн Златоуст Кн1,кн2', '', 'Полное собрание сочинений Иоанна Златоуста. Кн.1(т.1-3), кн.2(т.4-6)', '14861422', '60x90 1/8', '6395', '9613')
COUNT(*) = 7
2: INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 2, '5-17-013346-4', '542533', '', 'Альбом "Венеция.Искусство"2тт', 'Романелли Дж.Д.', 'Венеция. Искусство сквозь века', '', '350x280', '7860', '8950')
COUNT(*) = 9
3: INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 3, '5-17-019564-8', '241038', '', 'Альбом "Рим.Иск.сквозь века2тт', 'Буссальи М.', 'Рим. Искусство сквозь века. В 2 т. Т. 1,2', '343', '60x90 1/8', '6370', '8950')
COUNT(*) = 11
4: INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 4, '5-17-027393-2', '581637', '', 'Альбом "Геральдика"', 'Санти-Мадзини Д.', 'Геральдика. История, терминология, символы и значения гербов и эмблем', '593', '290x310', '4064', '6998')
COUNT(*) = 13


Лог №2:
Код

1: INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 1, '985-6503-82-5', '600348', '', 'Религия.Иоанн Златоуст Кн1,кн2', '', 'Полное собрание сочинений Иоанна Златоуста. Кн.1(т.1-3), кн.2(т.4-6)', '14861422', '60x90 1/8', '6395', '9613')
COUNT(*) = 6
2: INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 2, '5-17-013346-4', '542533', '', 'Альбом "Венеция.Искусство"2тт', 'Романелли Дж.Д.', 'Венеция. Искусство сквозь века', '', '350x280', '7860', '8950')
COUNT(*) = 8
3: INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 3, '5-17-019564-8', '241038', '', 'Альбом "Рим.Иск.сквозь века2тт', 'Буссальи М.', 'Рим. Искусство сквозь века. В 2 т. Т. 1,2', '343', '60x90 1/8', '6370', '8950')
COUNT(*) = 10
4: INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 4, '5-17-027393-2', '581637', '', 'Альбом "Геральдика"', 'Санти-Мадзини Д.', 'Геральдика. История, терминология, символы и значения гербов и эмблем', '593', '290x310', '4064', '6998')
COUNT(*) = 12


Сколько раз выполняешь скрипт, столько вариантов значения COUNT(*) - 1, 20, 3, 9

Это сообщение отредактировал(а) Itsys - 20.2.2008, 17:40
PM MAIL WWW Skype   Вверх
ginnie
Дата 20.2.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Уважаемый Itsys, сделайте запрос к БД

Код

SELECT * FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1


Результаты в студию!

Это сообщение отредактировал(а) ginnie - 20.2.2008, 18:54


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Itsys
Дата 20.2.2008, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



SELECT * FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1 ORDER BY RowNumber ASC  smile 

Код

34    1    1    0    NULL    NULL    NULL    985-6503-82-5    600348    NULL        Религия.Иоанн Златоуст Кн1,кн2        Полное собрание сочинений Иоанна Златоуста. Кн.1(т.1-3), кн.2(т.4-6)    NULL    14861422    60x90 1/8    NULL    NULL    6395    9613    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
34    1    1    0    NULL    NULL    NULL    985-6503-82-5    600348    NULL        Религия.Иоанн Златоуст Кн1,кн2        Полное собрание сочинений Иоанна Златоуста. Кн.1(т.1-3), кн.2(т.4-6)    NULL    14861422    60x90 1/8    NULL    NULL    6395    9613    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
34    1    2    0    NULL    NULL    NULL    5-17-013346-4    542533    NULL        Альбом "Венеция.Искусство"2тт    Романелли Дж.Д.    Венеция. Искусство сквозь века    NULL        350x280    NULL    NULL    7860    8950    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
34    1    2    0    NULL    NULL    NULL    5-17-013346-4    542533    NULL        Альбом "Венеция.Искусство"2тт    Романелли Дж.Д.    Венеция. Искусство сквозь века    NULL        350x280    NULL    NULL    7860    8950    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
34    1    3    0    NULL    NULL    NULL    5-17-019564-8    241038    NULL        Альбом "Рим.Иск.сквозь века2тт    Буссальи М.    Рим. Искусство сквозь века. В 2 т. Т. 1,2    NULL    343    60x90 1/8    NULL    NULL    6370    8950    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
34    1    3    0    NULL    NULL    NULL    5-17-019564-8    241038    NULL        Альбом "Рим.Иск.сквозь века2тт    Буссальи М.    Рим. Искусство сквозь века. В 2 т. Т. 1,2    NULL    343    60x90 1/8    NULL    NULL    6370    8950    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
34    1    4    0    NULL    NULL    NULL    5-17-027393-2    581637    NULL        Альбом "Геральдика"    Санти-Мадзини Д.    Геральдика. История, терминология, символы и значения гербов и эмблем    NULL    593    290x310    NULL    NULL    4064    6998    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
34    1    4    0    NULL    NULL    NULL    5-17-027393-2    581637    NULL        Альбом "Геральдика"    Санти-Мадзини Д.    Геральдика. История, терминология, символы и значения гербов и эмблем    NULL    593    290x310    NULL    NULL    4064    6998    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL


PM MAIL WWW Skype   Вверх
ginnie
Дата 20.2.2008, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Если $SQLFastbook не DBI, то, возможно, собака зарыта в функции do().


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Itsys
Дата 20.2.2008, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



DBI  smile

Добавлено через 2 минуты и 26 секунд
Самое главное, что в базе еще дофига других таблиц и все работает нормально

Добавлено через 3 минуты и 21 секунду
Подключение к MS SQL через ODBC драйвер
PM MAIL WWW Skype   Вверх
ginnie
Дата 20.2.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Тогда включите лог в DBI и смотрите, почему у Вас записи по два раза вставляются.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Itsys
Дата 20.2.2008, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



Попробую....
PM MAIL WWW Skype   Вверх
Itsys
Дата 21.2.2008, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



Лог DBI в студию:
Код

    DBI::db=HASH(0x1c56a18) trace level set to 0x0/3 (DBI @ 0x0/0) in DBI 1.601-ithread (pid 2340)
    -> STORE for DBD::ODBC::db (DBI::db=HASH(0x1c56a18)~INNER 'TraceLevel' '3|SQL|foo') thr#14f9d74
DBD::ODBC unsupported attribute passed (TraceLevel)
    STORE DBI::db=HASH(0x1c56a18) 'TraceLevel' => '3|SQL|foo'
2   -> FETCH for DBD::ODBC::db (DBI::db=HASH(0x1c56a18)~INNER 'Warn') thr#14f9d74
    .. FETCH DBI::db=HASH(0x1c51d98) 'Warn' = 1
2   <- FETCH= 1 at DBI.pm line 1380 via  at suppliers.cgi line 207
    DBI::db=HASH(0x1c51d98) trace level set to 0x100/3 (DBI @ 0x3/0) in DBI 1.601-ithread (pid 2340)
    <- STORE= 1 at suppliers.cgi line 207
    -> do for DBD::ODBC::db (DBI::db=HASH(0x1c51e10)~0x1c51d98 'INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 1, '985-6503-82-5', '600348', '', 'Религи..Иоанн Златоуст Кн1,кн2', '', 'Полное собрание сочинений Иоанна Златоуста. Кн.1(т.1-3), кн.2(т.4-6)', '14861422', '60x90 1/8', '6395', '9613')') thr#11a6014
    SQLExecDirect sql INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 1, '985-6503-82-5', '600348', '', 'Религия.Иоанн Златоуст Кн1,кн2', '', 'Полное собрание сочинений Иоанна Златоуста. Кн.1(т.1-3), кн.2(т.4-6)', '14861422', '60x90 1/8', '6395', '9613')
    dbd_db_execdirect (rc = 0)...
    <- do= 1 at suppliers.cgi line 236
    -> prepare for DBD::ODBC::db (DBI::db=HASH(0x1c56a90)~0x1c56a18 'SELECT COUNT(*) AS CNT FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1') thr#14f9d74
    New 'DBI::st' (for DBD::ODBC::st, parent=DBI::db=HASH(0x1c56a18), id=undef)
    dbih_setup_handle(DBI::st=HASH(0x274e438)=>DBI::st=HASH(0x274e3c0), DBD::ODBC::st, 23357e8, Null!)
    dbih_make_com(DBI::db=HASH(0x1c56a18), 1c57dc4, DBD::ODBC::st, 212, 0) thr#14f9d74
    SQLPrepare returned 0

    dbd_st_prepare'd sql f8986504, ExecDirect=0
    SELECT COUNT(*) AS CNT FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1
    <- prepare= DBI::st=HASH(0x274e438) at suppliers.cgi line 242
    -> execute for DBD::ODBC::st (DBI::st=HASH(0x274e438)~0x274e3c0) thr#14f9d74
    dbd_st_execute (for hstmt 8986504 before)...
dbd_error: err_rc=0 rc=0 s/d/e: 8986504/8997128/8984816
dbd_error: err_rc=0 rc=0 s/d/e: 0/8997128/8984816
dbd_error: err_rc=0 rc=0 s/d/e: 0/0/8984816
    dbd_describe sql 8986504: num_fields=1
      col  1: INTEGER  (4) len=  4 disp= 12, prec= 10 scale=0
      col  1: 'CNT' sqltype=INTEGER, ctype=SQL_C_CHAR, maxlen=12, (dp = 0, cp = 0)
dbd_describe failed, dbd_st_execute #2...!
    <- execute= -1 at suppliers.cgi line 243
    -> fetchrow_hashref in DBD::_::st for DBD::ODBC::st (DBI::st=HASH(0x274e438)~0x274e3c0) thr#14f9d74
1   -> FETCH for DBD::ODBC::st (DBI::st=HASH(0x274e3c0)~INNER 'NAME') thr#14f9d74
1   <- FETCH= [ 'CNT' ] at suppliers.cgi line 244
1   -> fetch for DBD::ODBC::st (DBI::st=HASH(0x274e3c0)~INNER) thr#14f9d74
       SQLFetch rc 0
    dbih_setup_fbav alloc for 1 fields
fetch num_fields=1
1   <- fetch= [ '2' ] row1 at suppliers.cgi line 244
    <- fetchrow_hashref= HASH(0x2750b80)1keys row1 at suppliers.cgi line 244
    -> DESTROY for DBD::ODBC::st (DBI::st=HASH(0x27509a0)~INNER) thr#11a6014
    <- DESTROY= undef at suppliers.cgi line 245 via  at suppliers.cgi line 245
    -> do for DBD::ODBC::db (DBI::db=HASH(0x1c56a90)~0x1c56a18 'INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 2, '5-17-013346-4', '542533', '', 'Альбом "Венеци..Искусство"2тт', 'Романелли Дж.Д.', 'Венеци.. Искусство сквозь века', '', '350x280', '7860', '8950')') thr#14f9d74
    SQLExecDirect sql INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 2, '5-17-013346-4', '542533', '', 'Альбом "Венеция.Искусство"2тт', 'Романелли Дж.Д.', 'Венеция. Искусство сквозь века', '', '350x280', '7860', '8950')
    dbd_db_execdirect (rc = 0)...
    <- do= 1 at suppliers.cgi line 236
    -> prepare for DBD::ODBC::db (DBI::db=HASH(0x1c51e10)~0x1c51d98 'SELECT COUNT(*) AS CNT FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1') thr#11a6014
    New 'DBI::st' (for DBD::ODBC::st, parent=DBI::db=HASH(0x1c51d98), id=undef)
    dbih_setup_handle(DBI::st=HASH(0x2750af0)=>DBI::st=HASH(0x2750a18), DBD::ODBC::st, 2750b50, Null!)
    dbih_make_com(DBI::db=HASH(0x1c51d98), 1c33b7c, DBD::ODBC::st, 212, 0) thr#11a6014
    SQLPrepare returned 0

    dbd_st_prepare'd sql f8998056, ExecDirect=0
    SELECT COUNT(*) AS CNT FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1
    <- prepare= DBI::st=HASH(0x2750af0) at suppliers.cgi line 242
    -> execute for DBD::ODBC::st (DBI::st=HASH(0x2750af0)~0x2750a18) thr#11a6014
    dbd_st_execute (for hstmt 8998056 before)...
dbd_error: err_rc=0 rc=0 s/d/e: 8998056/8988976/8984648
dbd_error: err_rc=0 rc=0 s/d/e: 0/8988976/8984648
dbd_error: err_rc=0 rc=0 s/d/e: 0/0/8984648
    dbd_describe sql 8998056: num_fields=1
      col  1: INTEGER  (4) len=  4 disp= 12, prec= 10 scale=0
      col  1: 'CNT' sqltype=INTEGER, ctype=SQL_C_CHAR, maxlen=12, (dp = 0, cp = 0)
dbd_describe failed, dbd_st_execute #2...!
    <- execute= -1 at suppliers.cgi line 243
    -> fetchrow_hashref for DBD::ODBC::st (DBI::st=HASH(0x2750af0)~0x2750a18) thr#11a6014
1   -> FETCH for DBD::ODBC::st (DBI::st=HASH(0x2750a18)~INNER 'NAME') thr#11a6014
1   <- FETCH= [ 'CNT' ] at suppliers.cgi line 244
1   -> fetch for DBD::ODBC::st (DBI::st=HASH(0x2750a18)~INNER) thr#11a6014
       SQLFetch rc 0
    dbih_setup_fbav alloc for 1 fields
fetch num_fields=1
1   <- fetch= [ '4' ] row1 at suppliers.cgi line 244
    <- fetchrow_hashref= HASH(0x2750ba4)1keys row1 at suppliers.cgi line 244
    -> DESTROY for DBD::ODBC::st (DBI::st=HASH(0x2750a18)~INNER) thr#11a6014
    <- DESTROY= undef at suppliers.cgi line 245 via  at suppliers.cgi line 245
    -> do for DBD::ODBC::db (DBI::db=HASH(0x1c56a90)~0x1c56a18 'INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 3, '5-17-019564-8', '241038', '', 'Альбом "Рим.Иск.сквозь века2тт', 'Буссальи М.', 'Рим. Искусство сквозь века. В 2 т. Т. 1,2', '343', '60x90 1/8', '6370', '8950')') thr#14f9d74
    SQLExecDirect sql INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 3, '5-17-019564-8', '241038', '', 'Альбом "Рим.Иск.сквозь века2тт', 'Буссальи М.', 'Рим. Искусство сквозь века. В 2 т. Т. 1,2', '343', '60x90 1/8', '6370', '8950')
    dbd_db_execdirect (rc = 0)...
    <- do= 1 at suppliers.cgi line 236
    -> prepare for DBD::ODBC::db (DBI::db=HASH(0x1c51e10)~0x1c51d98 'SELECT COUNT(*) AS CNT FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1') thr#11a6014
    New 'DBI::st' (for DBD::ODBC::st, parent=DBI::db=HASH(0x1c51d98), id=undef)
    dbih_setup_handle(DBI::st=HASH(0x2750ab4)=>DBI::st=HASH(0x2750af0), DBD::ODBC::st, 2750b68, Null!)
    dbih_make_com(DBI::db=HASH(0x1c51d98), 1c33b7c, DBD::ODBC::st, 212, 0) thr#11a6014
    SQLPrepare returned 0

    dbd_st_prepare'd sql f8986504, ExecDirect=0
    SELECT COUNT(*) AS CNT FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1
    <- prepare= DBI::st=HASH(0x2750ab4) at suppliers.cgi line 242
    -> execute for DBD::ODBC::st (DBI::st=HASH(0x2750ab4)~0x2750af0) thr#11a6014
    dbd_st_execute (for hstmt 8986504 before)...
dbd_error: err_rc=0 rc=0 s/d/e: 8986504/8988976/8984648
dbd_error: err_rc=0 rc=0 s/d/e: 0/8988976/8984648
dbd_error: err_rc=0 rc=0 s/d/e: 0/0/8984648
    dbd_describe sql 8986504: num_fields=1
      col  1: INTEGER  (4) len=  4 disp= 12, prec= 10 scale=0
      col  1: 'CNT' sqltype=INTEGER, ctype=SQL_C_CHAR, maxlen=12, (dp = 0, cp = 0)
dbd_describe failed, dbd_st_execute #2...!
    <- execute= -1 at suppliers.cgi line 243
    -> fetchrow_hashref for DBD::ODBC::st (DBI::st=HASH(0x274e4d4)~0x274e510) thr#14f9d74
1   -> FETCH for DBD::ODBC::st (DBI::st=HASH(0x274e510)~INNER 'NAME') thr#14f9d74
1   <- FETCH= [ 'CNT' ] at suppliers.cgi line 244
1   -> fetch for DBD::ODBC::st (DBI::st=HASH(0x274e510)~INNER) thr#14f9d74
       SQLFetch rc 0
    dbih_setup_fbav alloc for 1 fields
fetch num_fields=1
1   <- fetch= [ '6' ] row1 at suppliers.cgi line 244
    <- fetchrow_hashref= HASH(0x2750bc8)1keys row1 at suppliers.cgi line 244
    -> DESTROY for DBD::ODBC::st (DBI::st=HASH(0x274e510)~INNER) thr#14f9d74
    <- DESTROY= undef at suppliers.cgi line 245 via  at suppliers.cgi line 245
    -> do for DBD::ODBC::db (DBI::db=HASH(0x1c56a90)~0x1c56a18 'INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 4, '5-17-027393-2', '581637', '', 'Альбом "Геральдика"', 'Санти-Мадзини Д.', 'Геральдика. Истори., терминологи., символы и значени. гербов и эмблем', '593', '290x310', '4064', '6998')') thr#14f9d74
    SQLExecDirect sql INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col2, Col3, Col5, Col6, Col7, Col8, Col10, Col11, Col14, Col15) VALUES
                                                    (34, 1, 4, '5-17-027393-2', '581637', '', 'Альбом "Геральдика"', 'Санти-Мадзини Д.', 'Геральдика. История, терминология, символы и значения гербов и эмблем', '593', '290x310', '4064', '6998')
    dbd_db_execdirect (rc = 0)...
    <- do= 1 at suppliers.cgi line 236
    -> prepare for DBD::ODBC::db (DBI::db=HASH(0x1c56a90)~0x1c56a18 'SELECT COUNT(*) AS CNT FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1') thr#14f9d74
    New 'DBI::st' (for DBD::ODBC::st, parent=DBI::db=HASH(0x1c56a18), id=undef)
    dbih_setup_handle(DBI::st=HASH(0x274e4ec)=>DBI::st=HASH(0x274e4d4), DBD::ODBC::st, 274e5b8, Null!)
    dbih_make_com(DBI::db=HASH(0x1c56a18), 1c57dc4, DBD::ODBC::st, 212, 0) thr#14f9d74
    SQLPrepare returned 0

    dbd_st_prepare'd sql f8998056, ExecDirect=0
    SELECT COUNT(*) AS CNT FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1
    <- prepare= DBI::st=HASH(0x274e4ec) at suppliers.cgi line 242
    -> execute for DBD::ODBC::st (DBI::st=HASH(0x274e4ec)~0x274e4d4) thr#14f9d74
    dbd_st_execute (for hstmt 8998056 before)...
dbd_error: err_rc=0 rc=0 s/d/e: 8998056/8997128/8984816
dbd_error: err_rc=0 rc=0 s/d/e: 0/8997128/8984816
dbd_error: err_rc=0 rc=0 s/d/e: 0/0/8984816
    dbd_describe sql 8998056: num_fields=1
      col  1: INTEGER  (4) len=  4 disp= 12, prec= 10 scale=0
      col  1: 'CNT' sqltype=INTEGER, ctype=SQL_C_CHAR, maxlen=12, (dp = 0, cp = 0)
dbd_describe failed, dbd_st_execute #2...!
    <- execute= -1 at suppliers.cgi line 243
    -> fetchrow_hashref for DBD::ODBC::st (DBI::st=HASH(0x274e4ec)~0x274e4d4) thr#14f9d74
1   -> FETCH for DBD::ODBC::st (DBI::st=HASH(0x274e4d4)~INNER 'NAME') thr#14f9d74
1   <- FETCH= [ 'CNT' ] at suppliers.cgi line 244
1   -> fetch for DBD::ODBC::st (DBI::st=HASH(0x274e4d4)~INNER) thr#14f9d74
       SQLFetch rc 0
    dbih_setup_fbav alloc for 1 fields
fetch num_fields=1
1   <- fetch= [ '8' ] row1 at suppliers.cgi line 244
    <- fetchrow_hashref= HASH(0x274e60c)1keys row1 at suppliers.cgi line 244
    -> DESTROY for DBD::ODBC::st (DBI::st=HASH(0x274e4d4)~INNER) thr#14f9d74
    <- DESTROY= undef at suppliers.cgi line 245 via  at suppliers.cgi line 245


PM MAIL WWW Skype   Вверх
ginnie
Дата 21.2.2008, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Itsys, попробуйте вставить строку в таблицу из SQL-менеджера, может у Вас там триггер на вставку отрабатывает? В логе я ничего странного не увидел.

Кроме этого

Код

$SQLFastbook->prepare($query);


надо делать вне цикла, а внутри цикла только execute() - это для повышения производительности  smile 

Это сообщение отредактировал(а) ginnie - 21.2.2008, 12:18


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Itsys
Дата 21.2.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



Пробовал... при запросе из Query Analyzer - добавляется одна строка.

При трассировке показывает, что проходит как-бы 2 запроса друг за дружкой, причем все запросы по 2 шт. - на удаление данных из таблицы и на добавление данных в таблицу, причем это касается только этой таблицы!
До указанного кода выполняется следующий запрос (посылается одним методом do):
Код

DELETE FROM SuppliersFileColumns WHERE SupplierId = 34 AND GoodType = 1
DELETE FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1
INSERT INTO SuppliersFileColumns (SupplierId, GoodType, ColumnName, ColumnPosition, DBColumn, FindPosition, Clause, ClauseValue, DBCheck) VALUES
                                                          (34, 1, 'CISBN', 2, 'ISBN', 2, '', 0, 1)
INSERT INTO SuppliersFileColumns (SupplierId, GoodType, ColumnName, ColumnPosition, DBColumn, FindPosition, Clause, ClauseValue, DBCheck) VALUES
                                                          (34, 1, 'IDNAME', 3, 'SupplierCode', 1, '', 0, 1)
INSERT INTO SuppliersFileColumns (SupplierId, GoodType, ColumnName, ColumnPosition, DBColumn, FindPosition, Clause, ClauseValue, DBCheck) VALUES
                                                          (34, 1, 'C_SERIE', 5, 'Series', 0, '', 0, 1)
INSERT INTO SuppliersFileColumns (SupplierId, GoodType, ColumnName, ColumnPosition, DBColumn, FindPosition, Clause, ClauseValue, DBCheck) VALUES
                                                          (34, 1, 'CNAME', 6, 'SupplierName', 0, '', 0, 0)
INSERT INTO SuppliersFileColumns (SupplierId, GoodType, ColumnName, ColumnPosition, DBColumn, FindPosition, Clause, ClauseValue, DBCheck) VALUES
                                                          (34, 1, 'CAUTHOR', 7, 'Autors', 0, '', 0, 0)
INSERT INTO SuppliersFileColumns (SupplierId, GoodType, ColumnName, ColumnPosition, DBColumn, FindPosition, Clause, ClauseValue, DBCheck) VALUES
                                                          (34, 1, 'CLONGNAME', 8, 'Name', 0, '', 0, 0)
INSERT INTO SuppliersFileColumns (SupplierId, GoodType, ColumnName, ColumnPosition, DBColumn, FindPosition, Clause, ClauseValue, DBCheck) VALUES
                                                          (34, 1, 'IPAGETOTAL', 10, 'Papers', 0, '', 0, 1)
INSERT INTO SuppliersFileColumns (SupplierId, GoodType, ColumnName, ColumnPosition, DBColumn, FindPosition, Clause, ClauseValue, DBCheck) VALUES
                                                          (34, 1, 'CFORMAT', 11, 'Format', 0, '', 0, 0)
INSERT INTO SuppliersFileColumns (SupplierId, GoodType, ColumnName, ColumnPosition, DBColumn, FindPosition, Clause, ClauseValue, DBCheck) VALUES
                                                          (34, 1, 'iWeight1', 14, 'Weight', 0, '', 0, 1)
INSERT INTO SuppliersFileColumns (SupplierId, GoodType, ColumnName, ColumnPosition, DBColumn, FindPosition, Clause, ClauseValue, DBCheck) VALUES
                                                          (34, 1, 'YPRICE', 15, 'Price', 0, '>', 90, 1)


Так вот, трейсер показывает, что первая строка запроса (DELETE FROM SuppliersFileColumns WHERE SupplierId = 34 AND GoodType = 1) выполняется 1 раз, а все остальные строки запроса выполняются по 2 раза, и дальше, все запросы выполняются по 2 раза.

Добавлено через 7 минут и 18 секунд
Убрал DELETE FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1 из того запроса в отдельный  smile 

Первый запрос все строки отрабатываются по одной, но после прохождения этого запроса все остальные строки по добавлению строк в таблицу SuppliersFileRows доблируются, так же дублируются запросы
SELECT COUNT(*) AS CNT FROM SuppliersFileRows WHERE SupplierId = 34 AND GoodType = 1
 smile 
PM MAIL WWW Skype   Вверх
Itsys
Дата 22.2.2008, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



Трейсер показывает, что запросы (задвоенные) выполняются на разных SPID, т.е. по одному запросу допустим на SPID 55 и еще по одному запросу на SPID 52 -  поэтому и задваивается все.

Два DELETE вполняются тоже на тех же SPID, только раньше, чем процесс вставки - поэтому сначала один SPID очищает таблицу, потом другой очищает уже очищенную таблицу и затем кажды SPID всталяют по 4 строки.

Сам то понял, чего написал?  smile 
PM MAIL WWW Skype   Вверх
Itsys
Дата 22.2.2008, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



Трейсер показал, что сначала выполняются все 4 запроса на добавление записей и последний запрос UPDATE Suppliers SET FileLoadState = 1 WHERE SupplierId = 34, а потом они же и последний запрос на другом SPID
PM MAIL WWW Skype   Вверх
Itsys
Дата 22.2.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



Люди хелп!!!! Время идет а проект стоит  smile  smile  smile 

Уже всю голову сломал - и переименовывал таблицу - все тоже самое  smile 

Может это глюк ODBC?

Может кто знает как посмотреть что проиходит в ODBC - что он получает, что отправляет на сервер? Есть ли какой-нибудь трейсер для ODBC
PM MAIL WWW Skype   Вверх
ginnie
Дата 22.2.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Itsys, похоже глюк либо в ODBC (менее вероятно), либо в драйвере для SQL Servera. Если платформа Windows, попробуй сначала поставить последний MDAC.

P.S. в Windows в ODBC, как мне кажется, можно лог в файл включить.

Это сообщение отредактировал(а) ginnie - 22.2.2008, 17:26


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Itsys
Дата 22.2.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



Стандартный трейсер ODBC ничего в логе не отображает - лог вообще пустой
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0941 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.