Обновление БД не Г... Ужасные последствия! Помогите!!!
Модераторы: m0p3e, edward_K, Модераторы
-
- Новичок
- Сообщения: 26
- Зарегистрирован: 30 авг 2005, 17:25
- Откуда: Ярославль, Электровозоремонтный завод
- Контактная информация:
Обновление БД не Г... Ужасные последствия! Помогите!!!
(Г 5.85.02, Pervasive) Зарплату у нас перечисляют на пластиковые карты. В Зарплате в лицевых счетах в поле "... стажи работ" (LSCHET.PASPORT) соотв. указан номер лицевого счета. Также настроены потоянные удержания (SHTRAF.NOMLSH).
Банк прислал письмо, где уведомил, что "ввиду изменен. в законодат. изменятся номера счетов" и прислал DBF файл YugraLS, где указал соответствие между новыми и старыми л/с (поля новый, старый л/с).
В виду моей непереносимости Галактического недоSQL, решил использовать стандартные средства: импортнул таблицу YugraLS в Г средствами "Import and Export Data" от MS SQL 2000, и средствами Pervasive Control Center выдал запрос
UPDATE lschet SET lschet.pasport =
(SELECT YugraLS.SC_NEW
FROM YugraLS
where YugraLS.SC_OLD = lschet.pasport)
запрос нормально отработал, но - О УЖАС, ШЕФ! ВСЕ ПРОПАЛО!
Смотрю ч-з Г в лицевые счета - у кого-то л/с исправлены, а кого-то пропала информация!
Вопрос: чё не так сделал и как исправить?
Банк прислал письмо, где уведомил, что "ввиду изменен. в законодат. изменятся номера счетов" и прислал DBF файл YugraLS, где указал соответствие между новыми и старыми л/с (поля новый, старый л/с).
В виду моей непереносимости Галактического недоSQL, решил использовать стандартные средства: импортнул таблицу YugraLS в Г средствами "Import and Export Data" от MS SQL 2000, и средствами Pervasive Control Center выдал запрос
UPDATE lschet SET lschet.pasport =
(SELECT YugraLS.SC_NEW
FROM YugraLS
where YugraLS.SC_OLD = lschet.pasport)
запрос нормально отработал, но - О УЖАС, ШЕФ! ВСЕ ПРОПАЛО!
Смотрю ч-з Г в лицевые счета - у кого-то л/с исправлены, а кого-то пропала информация!
Вопрос: чё не так сделал и как исправить?
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Repair из Support'а спасет отца русской демократии ...
Только вот если журнализация включена и таблы эти журнализируются, а иначе - только восстановление бэкапа
Только вот если журнализация включена и таблы эти журнализируются, а иначе - только восстановление бэкапа
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Информация пропала - это значит, что не для всех pasport были соответствия в YugraLS. Запросы то надо уметь писать, если уж не хотите использовать VIP. И кстати, причем тут MSSQL2000, если используется Pervasive?
Код: Выделить всё
UPDATE lschet SET pasport = YugraLS.SC_NEW
FROM lschet
INNER JOIN YugraLS ON YugraLS.SC_OLD = lschet.pasport
-
- Новичок
- Сообщения: 26
- Зарегистрирован: 30 авг 2005, 17:25
- Откуда: Ярославль, Электровозоремонтный завод
- Контактная информация:
2Goblin
2Алексей
Pervasive Control Center - для баз первасива Галактики самый что ни на есть родной инструментарий, со стандартным (более-менее) диалектом SQL. Естессно, Г и не знала, что её базу правят! Кака-така журнализация?
2Алексей
Cложность - это база для подстановки в формате DBF! Какой-такой ВИП? Он может обновлять базу Г в первасиве на основе таблицы DBF?
Кака-така простецкая программа на ВИПе? Проще, чем приведенный мною запрос?
2WiRuc
Подозреваю, что Ваш запрос правильный, но уточните, для какого диалекта SQL? Явно не Галактический недоSQL (они там и слов таких не знают -INNER JOIN, в sql.pdf, во всяком случае, упоминания нет)
Диалект Pervasive.SQL 2000i имеет другой синтаксис:
Про MSSQL2000 поясняю - у него есть средства экспорта-импорта "Import and Export Data", создаёшь содинение источник данных ODBC, напр. GAL ("Pervasive ODBC Engine Interface"), источник к DBF, и импортишь! И таблица создастся, и данные в нее закачаются. Тока Support ее не увидит... никогда... А что с него взять, убогого?
Не хочу никого обидеть, просто существует мильён способов выдать SQL-запрос базам Г, в.т.ч. на Первасиве, но не надо ограничиваться Support с его недоSQL! Раширяйте кругозор!
2Алексей
Pervasive Control Center - для баз первасива Галактики самый что ни на есть родной инструментарий, со стандартным (более-менее) диалектом SQL. Естессно, Г и не знала, что её базу правят! Кака-така журнализация?
2Алексей
Cложность - это база для подстановки в формате DBF! Какой-такой ВИП? Он может обновлять базу Г в первасиве на основе таблицы DBF?
Кака-така простецкая программа на ВИПе? Проще, чем приведенный мною запрос?
2WiRuc
Подозреваю, что Ваш запрос правильный, но уточните, для какого диалекта SQL? Явно не Галактический недоSQL (они там и слов таких не знают -INNER JOIN, в sql.pdf, во всяком случае, упоминания нет)
Диалект Pervasive.SQL 2000i имеет другой синтаксис:
Ваш запрос смахивает на стандартный SQL-92, но в какое среде его применить для правки базы Г?The UPDATE statement can update only a single table at a time. UPDATE can relate to other tables via a subquery in the SET clause. This can be a correlated subquery that depends in part on the contents of the table being updated, or it can be a non-correlated subquery that depends only on another table.
Correlated Subquery
UPDATE T1 SET T1.C2 = (SELECT T2.C2 FROM T2 WHERE T2.C1 = T1.C1)
Про MSSQL2000 поясняю - у него есть средства экспорта-импорта "Import and Export Data", создаёшь содинение источник данных ODBC, напр. GAL ("Pervasive ODBC Engine Interface"), источник к DBF, и импортишь! И таблица создастся, и данные в нее закачаются. Тока Support ее не увидит... никогда... А что с него взять, убогого?
Не хочу никого обидеть, просто существует мильён способов выдать SQL-запрос базам Г, в.т.ч. на Первасиве, но не надо ограничиваться Support с его недоSQL! Раширяйте кругозор!
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Мда, про репайр это я стормозил
Тут только восстановление последнего бэкапа и выкачка из него данных спасет ...
Копилятор интерфейсов, он же VIP(он многое может), закуплен ?
Если да - то простенькой процедуркой(нет, она не проще чем запрос будет, строк на 20 всего) из DBF все вытащится и зальется...
Тут только восстановление последнего бэкапа и выкачка из него данных спасет ...
Копилятор интерфейсов, он же VIP(он многое может), закуплен ?
Если да - то простенькой процедуркой(нет, она не проще чем запрос будет, строк на 20 всего) из DBF все вытащится и зальется...
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Для MSSQL2000.Юра писал(а): Подозреваю, что Ваш запрос правильный, но уточните, для какого диалекта SQL?
Если для Pervasive, то можно так:
Код: Выделить всё
UPDATE lschet SET lschet.pasport =
(SELECT TOP 1 YugraLS.SC_NEW
FROM YugraLS
where YugraLS.SC_OLD = lschet.pasport)
WHERE pasport IN (select YugraLS.SC_OLD from YugraLS)
Ну а чтож тогда просто не создали Linked сервер к Pervasive и не использовали возможности T-SQL для написания запроса?Юра писал(а):Про MSSQL2000 поясняю - у него есть средства экспорта-импорта "Import and Export Data", создаёшь содинение источник данных ODBC, напр. GAL ("Pervasive ODBC Engine Interface"), источник к DBF, и импортишь! И таблица создастся, и данные в нее закачаются. Тока Support ее не увидит... никогда... А что с него взять, убогого?
Я также не хочу вас обидеть, но вот вы и расширили получили кучу проблем. Надо все таки быть очень осторожным с запросами, которые обновляют целиком всю таблицу.Юра писал(а): Не хочу никого обидеть, просто существует мильён способов выдать SQL-запрос базам Г, в.т.ч. на Первасиве, но не надо ограничиваться Support с его недоSQL! Раширяйте кругозор!
Теперь только восстанавливать из бэкапа.
-
- Новичок
- Сообщения: 26
- Зарегистрирован: 30 авг 2005, 17:25
- Откуда: Ярославль, Электровозоремонтный завод
- Контактная информация:
Нет в диалекте первазива TOP N ! Но в принципе, правильно, спасибо. Пока объяснял, сам все понял!WiRuc писал(а): Если для Pervasive, то можно так:Код: Выделить всё
UPDATE lschet SET lschet.pasport = (SELECT TOP 1 YugraLS.SC_NEW FROM YugraLS where YugraLS.SC_OLD = lschet.pasport) WHERE pasport IN (select YugraLS.SC_OLD from YugraLS)
Спасибо за подсказку, в голову не приходило. Попробуем!WiRuc писал(а): Ну а чтож тогда просто не создали Linked сервер к Pervasive и не использовали возможности T-SQL для написания запроса?
В общем, все вылечили. Восстановили из резервной копии инфу, потом в рабочую загрузили.
На самом деле изначально ошибка была в запросе. Должно быть так:
Код: Выделить всё
UPDATE lschet SET lschet.pasport =
(SELECT YugraLS.SC_NEW FROM YugraLS
where YugraLS.SC_OLD = schet.pasport)
WHERE pasport IN (select YugraLS.SC_OLD from YugraLS)
Всем спасибо за участие и помощь!
-
- Новичок
- Сообщения: 26
- Зарегистрирован: 30 авг 2005, 17:25
- Откуда: Ярославль, Электровозоремонтный завод
- Контактная информация:
списибо,Вам WiRuc!
In Example B, two tables are created and a variety of valid syntax examples are demonstrated. Note the cases where UPDATE fails because the subquery returns more than one row. Note that UPDATE succeeds and NULL is inserted if the subquery returns no rows (where NULL values are allowed).
...
UPDATE T1 SET T1.C2 = (SELECT T2.C2 FROM T2 WHERE T2.C1 = 5) -- update succeeds, NULL is inserted for all rows of T1.C2
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
Так для сведения...
Тут писали, что ВИП куплен или нет. На самом деле для операций по
моификацию данных ВИП покупать не надо..он и так работает.
Отличие купленного от некупленного в том, что некупленный не создает ресурс и поэтому наработанное невозможно использовать затем в Галактике. Но в тесте, а среде он все делает и выполнит любую модификацию данных или загрузку...
Тут писали, что ВИП куплен или нет. На самом деле для операций по
моификацию данных ВИП покупать не надо..он и так работает.
Отличие купленного от некупленного в том, что некупленный не создает ресурс и поэтому наработанное невозможно использовать затем в Галактике. Но в тесте, а среде он все делает и выполнит любую модификацию данных или загрузку...
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Для отработки запросов - не нужно , конверторы версий все с демо-лицензией идут ... Но не все операции по модификации данных, которые бывает необходимо сделать , можно сделать запросами - и вот тут и приходится писать фейсики по засасыванию, пережеввыванию и пр. возне с данными
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !