Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Большая беда + ADO  [new]
JohnS
Member

Откуда: Екатеринбург
Сообщений: 1842
Hi All
Накрыла большая беда

Некоторые позиции , примерно 1 на 30000 не пишуться в текстовой файл

У меня идет запись в Текстовый файл изменения которые произошли за период
Например:
ccode (Тип операции) = 0-удалить 1-добавть 2-изменить
Id - (Код товара)
Name (Имя товара)
Date (Текущяя дата)

Предположим раз в 1 час происходит запрос всех изменений за последнее время и запись их в текстовой файл . Затем архивация и на FTP server .
Измененийв день около 30 000 .

Вот пример запроса изменений на Бейсике (через ADO)

SQL = "select * From FirmChange " _
& "where cdate>=convert(datetime,'" + Format(rsDb!LastFirm, fDate) + "',104)"
rs.Open SQL, Cn, adOpenStatic, adLockOptimistic

Print #33, "#FirmChange"
rs.MoveFirst
While Not rs.EOF
    sStr = Str$(rs!ccode) ........................................................
    Print #33, sStr
 rs.MoveNext
Wend

где rsDb!LastFirm это дата последней Успешной записи в текстовой файл.
Если в процессе записи произошла ошибка тогда rsDb!Last не обновляеться .

Я не пойму , почему не все записи могут попадать в текстовой файл ? Может тип блокировки неверен ????
18 окт 05, 15:40    [1979955]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
Glory
Member

Откуда:
Сообщений: 104760
Я не пойму , почему не все записи могут попадать в текстовой файл ?
Непонятно, с чем вы сравнивате ? После окончания вашего запроса кто-то мог добавить в таблицу данные или изменить уже существующие.
18 окт 05, 15:53    [1980061]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
JohnS
Member

Откуда: Екатеринбург
Сообщений: 1842
Glory
Я не пойму , почему не все записи могут попадать в текстовой файл ?
Непонятно, с чем вы сравнивате ? После окончания вашего запроса кто-то мог добавить в таблицу данные или изменить уже существующие.


Просто например клиент звонит и говорить
"- Почему такой то товар стоит у нас в Acces базе ?"
Я смотру в таблице изменений и смотрю что товар в нешей MS SQL удалили например 17.10.2005 15:00, затем захожу на FTP server и смотрю что файлики выкладываюся нормально .
Смотрю текстовой файлик от 17.10.2005 17:00 в котором все изменения за последнии ТРИ часа , И ВИЖУ ЧТО изменения по данному товару вобще не присутствуют в нем !!!
Причем такой косяк примерно повторюсь 1-2 на 30000 записей .
18 окт 05, 16:08    [1980208]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
JohnS
Member

Откуда: Екатеринбург
Сообщений: 1842
Glory
Я не пойму , почему не все записи могут попадать в текстовой файл ?
Непонятно, с чем вы сравнивате ? После окончания вашего запроса кто-то мог добавить в таблицу данные или изменить уже существующие.


Просто например клиент звонит и говорить
"- Почему такой то товар стоит у нас в Acces базе ?"
Я смотру в таблице изменений и смотрю что товар в нешей MS SQL удалили например 17.10.2005 15:00, затем захожу на FTP server и смотрю что файлики выкладываюся нормально .
Смотрю текстовой файлик от 17.10.2005 17:00 в котором все изменения за последнии ТРИ часа , И ВИЖУ ЧТО изменения по данному товару вобще не присутствуют в нем !!!
Причем такой косяк примерно повторюсь 1-2 на 30000 записей .
18 окт 05, 16:14    [1980248]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ну и где доказательства того, что в момент начала вашего запроса эти изменения были в таблице ?
Вы проставляете всем выбранным запросом записям какой-то признак вроде время передачи ?
Вы блокирует на время передачи добавление/изменение данных ?
18 окт 05, 16:18    [1980267]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
JohnS
Member

Откуда: Екатеринбург
Сообщений: 1842
Glory
Ну и где доказательства того, что в момент начала вашего запроса эти изменения были в таблице ?
Вы проставляете всем выбранным запросом записям какой-то признак вроде время передачи ?
Вы блокирует на время передачи добавление/изменение данных ?



Сами изменения товара храняться в виде

Например таблица TableChanges

Код операции IDтовара ИмяТовара Дата
1 666 Аспирин 17.10.2005 15:01
0 666 Аспирин 17.10.2005 15:02
1 666 Аспирин 17.10.2005 15:03
2 666 Аспирин УПСА шипучий 17.10.2005 17:03

Это образуется тандемом Table -->TableChanges . В TableChanges сбразыватся все изменения происходившие в TABLE .
Эти записи в TableChanges не редактирутся , это результат действия триггера (Inserted,Deleted)
Блокировать изменения данных в первичтой таблице Table во время записи в текстой файл просто невозможно .

Пример

create trigger PhrGroup_Insert on Phr_Group for insert as
begin
insert into PhrGroupChange (code, name, ccode, cdate) 
select Phr_Group_code, Phr_Group_name, 0, getdate() from inserted
end

Данные в TableChanges храняться 4 дня , а запись в текстовик выполняеться раз в час . ТО есть ситуации когда программа выполняет запрос , а нужные данные в таблице отсуцтвуют , в принципе невозможна , для этого программа должна упасть и лежать >4 дней , что не было ни разу .
19 окт 05, 13:30    [1983687]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
Glory
Member

Откуда:
Сообщений: 104760
JohnS
Данные в TableChanges храняться 4 дня , а запись в текстовик выполняеться раз в час . ТО есть ситуации когда программа выполняет запрос , а нужные данные в таблице отсуцтвуют , в принципе невозможна , для этого программа должна упасть и лежать >4 дней , что не было ни разу .

Еще раз задам вопрос
После того как отработал ваш запрос

SQL = "select * From FirmChange " _
& "where cdate>=convert(datetime,'" + Format(rsDb!LastFirm, fDate) + "',104)"
rs.Open SQL, Cn, adOpenStatic, adLockOptimistic

и пошла запись в файл кто-то может изменить/добавить данные уже переданные вам запросом ?
19 окт 05, 13:35    [1983727]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
JohnS
Member

Откуда: Екатеринбург
Сообщений: 1842
И во время записи и после нее данные могут быть добавлены таблицу TableChanges , но они не могут быть просто так модифицированны или удалены .
19 окт 05, 15:10    [1984310]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
Glory
Member

Откуда:
Сообщений: 104760
JohnS
И во время записи и после нее данные могут быть добавлены таблицу TableChanges , но они не могут быть просто так модифицированны или удалены .

Значит они могут быть модифицированны или удалены сложно ?

Тогда еще один повторный вопрос
Как вы фиксируете в базе то, что какая-то запись из предназначенных для передачи действительно была выбрана вашим запросом ?
19 окт 05, 15:18    [1984353]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
JohnS
Member

Откуда: Екатеринбург
Сообщений: 1842
Все таблицы из которых беруться изменения не редактируются . Даже я как админ не изменяю их.

А фиксация данных происходит так (TableChanges)


//Вычисляем самую последнюю дату в таблице
Последняя дата=select Max(ДАТА) From TableChanges

//Запрос изменений новых изменений за последнее время
с SQL = "select * From TableChanges " _
& "where cdate>=convert(datetime,'" + Format(rsDb!LastFirm, fDate) + "',104)"
rs.Open SQL, Cn, adOpenStatic, adLockOptimistic

Идет записть в текстовой файл

если все хорошо тогда
rsDb!LastFirm=Последняя дата
, в следующий раз начнем запись с нее .
19 окт 05, 15:34    [1984473]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
Glory
Member

Откуда:
Сообщений: 104760
если все хорошо тогда
rsDb!LastFirm=Последняя дата
, в следующий раз начнем запись с нее .

Причем здесь ваше поле на форме ???
Я вас спрашиваю о столбце в таблице на сервере, который будет содержать признак того, что данная запись _действительно была выбрана_ запросом
19 окт 05, 15:42    [1984527]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
JohnS
Member

Откуда: Екатеринбург
Сообщений: 1842
Glory
если все хорошо тогда
rsDb!LastFirm=Последняя дата
, в следующий раз начнем запись с нее .

Причем здесь ваше поле на форме ???
Я вас спрашиваю о столбце в таблице на сервере, который будет содержать признак того, что данная запись _действительно была выбрана_ запросом

Нету такого . Для этого я применяю выборку за период .
20 окт 05, 08:47    [1986248]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
Glory
Member

Откуда:
Сообщений: 104760
JohnS
Glory
если все хорошо тогда
rsDb!LastFirm=Последняя дата
, в следующий раз начнем запись с нее .

Причем здесь ваше поле на форме ???
Я вас спрашиваю о столбце в таблице на сервере, который будет содержать признак того, что данная запись _действительно была выбрана_ запросом

Нету такого . Для этого я применяю выборку за период .

Откуда тогда вы знаете то, что запись, которая по вашим словам "пропадает", в действительности была в таблице именно в тот момент, когда отрабатывал ваш запрос ?
20 окт 05, 09:47    [1986461]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
JohnS
Member

Откуда: Екатеринбург
Сообщений: 1842
Glory
JohnS
Glory
если все хорошо тогда
rsDb!LastFirm=Последняя дата
, в следующий раз начнем запись с нее .

Причем здесь ваше поле на форме ???
Я вас спрашиваю о столбце в таблице на сервере, который будет содержать признак того, что данная запись _действительно была выбрана_ запросом

Нету такого . Для этого я применяю выборку за период .

Откуда тогда вы знаете то, что запись, которая по вашим словам "пропадает", в действительности была в таблице именно в тот момент, когда отрабатывал ваш запрос ?

Ну как же ..

Например я вижу текстовик
от XX.XX.XX 12:00
от XX.XX.XX 15:00
Клиент качает текстовики ,и некий товар не ставитья в базу КЛИЕНТА. Я смотрю в таблице , товар поставлен скажем в XX.XX.XX 13:00. Следовательно инфо о нем должно записаться в файлик от XX.XX.XX 15:00 . И файлик нерстю , а данных о транзакции нет !!!!
20 окт 05, 12:09    [1987398]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
Glory
Member

Откуда:
Сообщений: 104760
JohnS

Например я вижу текстовик
от XX.XX.XX 12:00
от XX.XX.XX 15:00
Клиент качает текстовики ,и некий товар не ставитья в базу КЛИЕНТА. Я смотрю в таблице , товар поставлен скажем в XX.XX.XX 13:00. Следовательно инфо о нем должно записаться в файлик от XX.XX.XX 15:00 . И файлик нерстю , а данных о транзакции нет !!!!

Вы какбудто меня не слушаете
Еще раз
Откуда тогда вы знаете то,
что запись, которая по вашим словам "пропадает",
в действительности была в таблице именно в тот момент, когда отрабатывал ваш запрос ?
20 окт 05, 12:27    [1987503]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
JohnS
Member

Откуда: Екатеринбург
Сообщений: 1842
Glory
JohnS

Например я вижу текстовик
от XX.XX.XX 12:00
от XX.XX.XX 15:00
Клиент качает текстовики ,и некий товар не ставитья в базу КЛИЕНТА. Я смотрю в таблице , товар поставлен скажем в XX.XX.XX 13:00. Следовательно инфо о нем должно записаться в файлик от XX.XX.XX 15:00 . И файлик нерстю , а данных о транзакции нет !!!!

Вы какбудто меня не слушаете
Еще раз
Откуда тогда вы знаете то,
что запись, которая по вашим словам "пропадает",
в действительности была в таблице именно в тот момент, когда отрабатывал ваш запрос ?


А почему она не может быть в этот момент , если таблица не редактирутся ?
20 окт 05, 13:42    [1987993]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
Glory
Member

Откуда:
Сообщений: 104760
JohnS
Вы какбудто меня не слушаете
Еще раз
Откуда тогда вы знаете то,
что запись, которая по вашим словам "пропадает",
в действительности была в таблице именно в тот момент, когда отрабатывал ваш запрос ?


А почему она не может быть в этот момент , если таблица не редактирутся ?[/quot]
Вы меня спрашивате ???
20 окт 05, 13:45    [1988018]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
ser51
Member

Откуда:
Сообщений: 1
Чья дата и время попадают в таблицу (сервака или клиента)?
Если клиента, то как синфронизируются они
20 окт 05, 16:06    [1989012]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10938
попробуй вместо даты-времени ориентироваться на поле типа таймштамп

запоминай последнее значение и делай выборку по записям у которых он больше
20 окт 05, 16:19    [1989098]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
JohnS
Member

Откуда: Екатеринбург
Сообщений: 1842
ser51
Чья дата и время попадают в таблицу (сервака или клиента)?
Если клиента, то как синфронизируются они


СЕРВАКА кашешно !!!! Попадает дата САМОЙ последней записи на MS SQL сервере .
21 окт 05, 09:24    [1990798]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
JohnS
Member

Откуда: Екатеринбург
Сообщений: 1842
MsDatabaseru
попробуй вместо даты-времени ориентироваться на поле типа таймштамп

Оно надежнее ????

MsDatabaseru

запоминай последнее значение и делай выборку по записям у которых он больше

А я так и делаю ( хнык , хнык ,хнык)
21 окт 05, 09:26    [1990811]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
JohnS
Member

Откуда: Екатеринбург
Сообщений: 1842
На всякий случай повторю упрощенную структуру

Table
Idтовара(Primary Key) Имя
666 Аспирин Шипучий

TableChanges

Код операции       IDтовара      ИмяТовара    Дата
1 666 Аспирин 17.10.2005 15:01
0 666 Аспирин 17.10.2005 15:021
2 666 Аспирин 17.10.2005 15:032
1 666 Аспирин УПСА шипучий 17.10.2005 17:03
21 окт 05, 09:31    [1990822]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
Andrey Ts
Member

Откуда: С-Пб
Сообщений: 516
Glory
JohnS

Например я вижу текстовик
от XX.XX.XX 12:00
от XX.XX.XX 15:00
Клиент качает текстовики ,и некий товар не ставитья в базу КЛИЕНТА. Я смотрю в таблице , товар поставлен скажем в XX.XX.XX 13:00. Следовательно инфо о нем должно записаться в файлик от XX.XX.XX 15:00 . И файлик нерстю , а данных о транзакции нет !!!!

Вы какбудто меня не слушаете
Еще раз
Откуда тогда вы знаете то,
что запись, которая по вашим словам "пропадает",
в действительности была в таблице именно в тот момент, когда отрабатывал ваш запрос ?

2 JohnS
Glory вам рекомендует сделать дополнительную проверки перед выполнением запроса или же раньше.
ИМХО, воспользуйтесь профайлером для отслеживания изменения Firm и затем сравните результат с вашей FirmChange
21 окт 05, 09:39    [1990837]     Ответить | Цитировать Сообщить модератору
 Re: Большая беда + ADO  [new]
Glory
Member

Откуда:
Сообщений: 104760
JohnS
MsDatabaseru

запоминай последнее значение и делай выборку по записям у которых он больше

А я так и делаю ( хнык , хнык ,хнык)

Надо делать так
1. В таблице вводится дополнительный столбец. Например export_time.
Этот столбец никем не заполнятеся и имеет значения NULL

2. Клиент запускает серверную процедуру/запрос вида
update FirmChange set export_time = GETDATE() where export_time is null

3. В триггере на update таблицы FirmChange делается возврат клиенту result set-а из таблицы inserted

4. Клиент пишет в файл полученный result set

Для проверки того, почему ранее "терялись" записи, можно изменить запрос из п.3 на
update FirmChange set export_time = GETDATE() where export_time is null
and cdate>=convert(datetime,'" + Format(rsDb!LastFirm, fDate) + "',104)"
С последующим разбором полетов когда и откуда в таблицу попала "потерявшаяся" запись
21 окт 05, 10:06    [1990916]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить