Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];

Вниз

В чем ошибка?   Найти похожие ветки 

 
Andrewtitoff ©   (2008-01-29 09:45) [0]

Здравствуйте, у меня в ниже приведенной процедуре, вызываемой по таймеру раз в сутки, возникает ошибка I/O Error 32, при чем возникает не сразу а со временем.., и как только один раз возникнет - то при каждом вызове возникает... =(((

procedure AssignNewSk;
var
fN1 : file of myString;
fN2 : file of myString;
fN3 : file of myString;
s : myString;
sd : string;
ns : string;
 c : integer;
begin
If FileExists(MD+"\z.lft") then
begin
AssignFile(fN1,MD+"\z.lft");
reset(fN1);
read(fN1,s);
closeFile(fN1);
sd:=s.STREET;
if FileExists(MD+"\Z\"+copy(s.STREET,1,10)+".lft") then DeleteFile(MD+"\Z\"+copy(s.STREET,1,10)+".lft");
Rename(fN1,MD+"\Z\"+copy(s.STREET,1,10)+".lft");
AssignFile(fN3,MD+"\Z\"+copy(s.STREET,1,10)+".lft");
reset(fN3);
AssignFile(fN2,MD+"\z.lft");
rewrite(fN2);
read(fN3,s);
s.Prichina:=copy(DateTimeToStr(time),1,8);
s.STREET:=copy(DateTimeToStr(date),1,10);
write(fN2,s);
c:=1;
while not eof(fN1) do
 begin
 read(fN3,s);
 if (s.VPuska="")and(s.Remont<>"Простой") then
  begin
  str(c,ns);
  s.Npp:=ns;
  if c<10 then s.Npp:="00"+ns;
  if (c>9)and(c<100) then s.Npp:="0"+ns;
  c:=c+1;
  s.Remont:=sd;
  write(fN2,s);
  end;
 end;
closeFile(fN2);
closeFile(fN3);
if formShow_.Visible then
 begin
 FormShow_.Hide;
 FormShow_.Show;
 end;
Application.MessageBox("Начата новая суточная карта","Новые сутки",MB_OK + MB_ICONEXCLAMATION);
end else Application.MessageBox("Cуточная карта не начата т.к. еще не заведено ни одной карты...","Новые сутки",MB_OK + MB_ICONEXCLAMATION);
end;


 
Игорь Шевченко ©   (2008-01-29 09:55) [1]

Больно слышать


 
Andrewtitoff ©   (2008-01-29 10:02) [2]

2 Игорь Шевченко
Ты не глумись - а лучше подскажи как лучше сделать, очень надо, а то создается впечатление что ты и сам неуверен как это правильно сделать и хочешь показаться умным оскорбляя других....


 
korstin ©   (2008-01-29 10:09) [3]

значит надо понять что значит I/O Error 32 и почему она может появиться )


 
Virgo_Style ©   (2008-01-29 10:10) [4]

Andrewtitoff ©   (29.01.08 10:02) [2]
как лучше сделать


Например, проверять результат выполнения, вести лог, погуглить "I/O Error 32"...

Надеюсь, подсказывая элементарные вещи, я не очень тебя оскорбил?


 
Andrewtitoff ©   (2008-01-29 10:24) [5]

2 korstin & Virgo_Style
Да погуглил еще вчера, я так понял что 32  ошибка - это значит закрыт доступ к файлу, но я немогу понять в чем дело, эта процедура вызывается по теймеру 1 раз в сутки с ним работает и другая процедура но в другое время(я уже 10 раз проверил, файл везде закрываю...), так что конфликтовать недолжны, единственное мое предноложение что проблема в таймере и он может иногда срабатывать дважды, но почему?, интервал стоит 1000 т.е. 1 секунда... и в таймере стоит if time = 00:01:00 then это процедура...
P.S.
1)Посоветуйте чего нить дельное желательно с примером
2) Я с дельфями знаком недавно, раньшен когда то писал на паскале, по этому плохо знаком с новыми функциями работы с файлами может это можно как нибудь по другому реализовать?...
3)Моя задача:
Моя программ создает файл(моего типа тип состоит из нескольких string[x] разного размера), так вот, эта сама прцедура раз в сутки должна копировать его в папку Z с переименованием(имя - дата создания файла, она записывается и в сам файл при создании), посли чего она его обрабатывает выкидывая некоторые записи, присваивает оставшимся порядковые номера и возвращает на место уже с вписаной новой датой создания....


 
korstin ©   (2008-01-29 10:31) [6]

TStringList.LoadToFile()
TStringList.SaveToFile()


 
korstin ©   (2008-01-29 10:31) [7]

+ конечно же лог


 
KilkennyCat ©   (2008-01-29 10:32) [8]

fN1 - cмотрим внимательней.


 
Virgo_Style ©   (2008-01-29 10:33) [9]

Если файлы небольшие, можно воспользоваться StringList"ами... Для начала можно вообще бросить три TMemo на форму. Загружать-сохранять с помощью .Lines.LoadFromFile/SaveToFile... Как отладишься - можно будет их заменить на StringList"ы.

А если не секрет, вот это

>if formShow_.Visible then
> begin
> FormShow_.Hide;
> FormShow_.Show;
>  end;

что такое? %-)


 
Andrewtitoff ©   (2008-01-29 10:37) [10]

2 korstin
А при чем тут TStringList?, я его не использую, мне это неподходит,
Тип у меня описан как:
 type
    myString = record
         Npp : string[3];
   Zayavitel : string[12];
    Prichina : string[44];
       VPost : string[8];
     VViezda : string[8];
      VPuska : string[8];
     Prostoy : string[5];
      Remont : string[65];
REGNUM : string[50];
STREET : string[50];
 HOUSE : string[50];
  CORP : string[50];
PARNUM : string[50];
REGION : string[50];
 PLACE : string[50];
BRIGADE : string[50];
HOLDER : string[50];
BELONG : string[50];
          end;
и поменять я это уже немогу, т.к. файлы моего типа используют и другие программы...
Вводимые пользователем данные отображаются в таблице.., так что я непонимаю как тут применить StringList
...  =(((


 
korstin ©   (2008-01-29 10:37) [11]


> KilkennyCat ©   (29.01.08 10:32) [8]
> fN1 - cмотрим внимательней.


Похвально


 
Andrewtitoff ©   (2008-01-29 10:40) [12]

2 Virgo_Style
Это я так обновляю форму на которой находится таблица а данными, которые меняет процедура, там в ONShow прописано обновление таблицы... =)))


 
Andrewtitoff ©   (2008-01-29 10:44) [13]

2 KilkennyCat
Тут что ли?
Rename(fN1,MD+"\Z\"+copy(s.STREET,1,10)+".lft");
если я не закрываю перед этим, то он другую ошибку выдает...


 
Andrewtitoff ©   (2008-01-29 10:48) [14]

2 KilkennyCat
Ааа.., в цикле, спасибо, но дело не в этом, ошибка была и до тока как я добавил третью переменную(для надежности)..., до этого я использовал тока две, закрывал файл, а потом с этой переменной асоциировал другой файл...


 
Andrewtitoff ©   (2008-01-29 10:50) [15]

2 KilkennyCat
while not eof(fN3) do
исправил, но это не решило проблемы... =(((


 
Игорь Шевченко ©   (2008-01-29 10:50) [16]

Значит ошибка в DNA


 
Плохиш ©   (2008-01-29 10:58) [17]


> Andrewtitoff ©   (29.01.08 10:24) [5]
> 2 korstin & Virgo_Style
> Да погуглил еще вчера, я так понял что 32  ошибка - это
> значит закрыт доступ к файлу

Вообще-то ошибка совместного доступа к файлу.

> Andrewtitoff ©   (29.01.08 09:45)  
> Здравствуйте, у меня в ниже приведенной процедуре, вызываемой
> по таймеру раз в сутки, возникает ошибка I/O Error 32, при
> чем возникает не сразу а со временем.., и как только один
> раз возникнет - то при каждом вызове возникает

Всё правильно, т.к. в коде ты её нигде не сбрасываешь, иди читай про IOResult, можно даже в справке по паскалю...


 
Andrewtitoff ©   (2008-01-29 11:01) [18]

2 Плохиш & All
ПОВТОРЯЮ НЕ ПРИ КАЖДОМ!!!...
При чем повторяю ошибка возникает не всегда, т.е. процедура вызвается 1 раз в сутки, я при тестировании ввожу некоторые данные, после чего перевожу часы на нужное время, затем опять ввожу и т.д..., так вот ошибка возникает раз так на 15- тый - 30 -тый, после чего сколько бы я время не переводил она выскакивает пока я не перезапущу программу... =((((


 
Andrewtitoff ©   (2008-01-29 11:02) [19]

2 Игорь Шевченко
Где?, можно поподробнее? =)))


 
Andrewtitoff ©   (2008-01-29 11:03) [20]

2 Плохиш ©
А как сбросить, и главное меня волнуе почему она вообще возникает...


 
Плохиш ©   (2008-01-29 11:08) [21]


> Andrewtitoff ©   (29.01.08 11:03) [20]

Я так понимаю, что читать про IOResult - не царское дело. Тогда возникает вопрос, нафига царю программировать, у него же голда не меряно, может и программиста нанять...


 
Andrewtitoff ©   (2008-01-29 11:10) [22]

2 Плохиш
Я немогу понять почему она возникает, этот файл используют две процедуры, вызываемые по таймеру в разное время: данная процедра в 00:01:00, и еще одна в 00:15:00,00:30:00,00:45:00,00:00:00...


 
Andrewtitoff ©   (2008-01-29 11:12) [23]

2 Плохиш
Да не, просто у меня сейчас справки нет, я обязательно сегодня почитаю, просто я немогу понять почему возникает эта ошибка, и в справке я тоже это не найду, то что это ошибка совместного доступа к файлу мы уже выяснили, а вот почему она возникает?....


 
Плохиш ©   (2008-01-29 11:23) [24]


> Andrewtitoff ©   (29.01.08 11:10) [22]


> в 00:01:00


> и еще одна в 00:15:00,00:30:00,00:45:00,00:00:00

Дальше объяснять надо?


 
Andrewtitoff ©   (2008-01-29 11:26) [25]

2 Плохиш
Почитал я в инете по OIResult
но там описаны тока эти номера ошибок и ничего интересного что могло бы мне помоч в решении проблемы я ненашел, я конечно буду рыть еще в данном направлении, но было бы проще если бы вы мне подсказали...  =)))
Код ошибки Описание
100 Чтение за границами файла
101 Диск переполнен
102 Не была вызвана процедура AssignFile
103 Файл закрыт
104 Файл не открыт для ввода
105 Файл не открыт для вывода
106 Неверный формат данных для процедуры Read


 
Andrewtitoff ©   (2008-01-29 11:30) [26]

2 Плохиш ©
Да, надо!, размер файла кб~10-15максимум, порядка 50-ти записей моего типа, и обрабатывается все это дело в считанные секунды(в конце выдается мессадж), а тут целая минута разницы..., хотя конечно время вызова этой процедуры не так принципиально, можно и подвинуть.., а какой тогда промежуток сделать что бы они точно друг - другу не мешали?...


 
Плохиш ©   (2008-01-29 11:35) [27]


IOResult Routine

Returns the status of the last I/O operation performed.

Unit
System

Syntax

[Delphi] function IOResult(): Integer;

Description
IOResult returns the result of the last Delphi I/O routine when I/O-checking is off (that is, when using the {$I-} compiler option). If IOResult returns 0, the last I/O operation succeeded. Otherwise, IOResult returns an error code.

If an I/O error occurs and I/O-checking is off, all subsequent I/O operations are ignored until the internal error flag is cleared. Calling IOResult clears the internal error flag.

An alternative way to handle I/O errors is to use exception handling with the {$I+} compiler option.


 
Andrewtitoff ©   (2008-01-29 11:59) [28]

2 Плохиш ©

Процедура выполняется меньше секунды, что одна, что другая, так что я думаю дело не в этом....

А по руски можно в бвух словах, а то у меня с английским не очень, боюсь ошибиться в переводе... =)))
как я понял что "Если  IOError встречается и проверка отключена - то все результаты I/O операций игнорируются пока флаг очищен. Вызывается очищение IOResult в флаге"? где то так...  =)))


 
Сергей М. ©   (2008-01-29 12:07) [29]


> Процедура выполняется меньше секунды


Неужели юзер успевает за пол-секунды жмакнуть кнопку ОК диалоге "Новые сутки" ?)


>  FormShow_.Hide;
>  FormShow_.Show;


А это что за приседания ?


 
Virgo_Style ©   (2008-01-29 12:31) [30]

Сергей М. ©   (29.01.08 12:07) [29]
А это что за приседания ?


А это вместо OnShow вызывать... я уже спрашивал чуть выше.


 
Сергей М. ©   (2008-01-29 12:35) [31]


> Virgo_Style ©   (29.01.08 12:31) [30]


Угу, вижу)

Впендюрить обновление таблицы в обработчик OnShow - мудрейшее решение !


 
Andrewtitoff ©   (2008-01-29 13:16) [32]

2 Сергей М.

Нет, смоти текст программы в самом конце, мессадж выводится в конце процедуры, когда уже все файлы закрыты..., я имелл ввиду выполнение процедуры без нажатия "OK", какая разница когда юзер на нажмет кнопку?, пороцедура вызывается 1 раз в сутки... если я неправ в чем то поправь...

Там все и происходит в ONShow, это другая форма(не главная), а эта процедура в главной форме и вызывается по таймеру..., у меня в программе их несколько(ФОРМ)....


 
Virgo_Style ©   (2008-01-29 13:17) [33]

Сергей М. ©   (29.01.08 12:35) [31]

Обновление в OnShow, инициализация в OnActivate, изменение положения и размеров компонентов "вручную" в OnResize... Надо было во вредные советы добавить)


 
ANB ©   (2008-01-29 13:19) [34]


> Andrewtitoff ©   (29.01.08 09:45)

1. Выкинуть программу
2. Написать ее заново, используя родные ОСовские способы работы с файлами (на хэндлах или стримы) при этом чтение производить с флагом мультидоступа.

Судя по объему кода работы часа на 2. Ты уже больше времени на трепню в форуме потратил.


 
Andrewtitoff ©   (2008-01-29 13:29) [35]

2 Virgo_Style ©
Да ладно те стебаться, я же в ONShow формы обновляю содержимое таблицы, что в этом плохого?, что вы прицепились к этому, там же все замечательно работает, лучше подскажите как решить проблему с 32-ой ошибкой...

2 ANB ©
Ты неправ, я же говорил что формат файла поменять немогу, и как ты интересно определил обьем кода из приведенной мною одной процедуры?.., к твоему сведению у меня 15 юнитов в программе..., просто все остальное работает...


 
Сергей М. ©   (2008-01-29 13:31) [36]


> файлы моего типа используют и другие программы


Я так понимаю, чужие программы, т.е. не твоей разработки ?

Интересно, откуда эти программы знают размер структуры, описанной твоим типом MyString ?

Ты и сам-то этот размер не знаешь, что уж про других говорить)


 
Virgo_Style ©   (2008-01-29 13:35) [37]

Andrewtitoff ©   (29.01.08 13:29) [35]
Да ладно те стебаться


Да эт я так... больше над собой в молодости :o), чем над тобой))))

А ANB, между тем, прав... Формат файла менять он и не предлагает.


 
Andrewtitoff ©   (2008-01-29 13:36) [38]

2 Сергей М.
Нет, моей!, просто они уже отлажены и замечательно работают и у меня никакого желания нету переделывать ВСЕ из-за совета ANB, который считает что приведенная мною процедура - и есть моя программа...
Почему я незнаю размер, я же выше приводил описание типа  myString , см [10]....


 
Сергей М. ©   (2008-01-29 13:38) [39]


> Почему я незнаю размер


Ну так скажи, чему он равен, если знаешь !


 
Andrewtitoff ©   (2008-01-29 13:40) [40]

2 Virgo_Style
Тогда я непонимаю немного... =(((
Если неменяя формат файла - то в принципе можно, тока как это сделать без геммороя, я же в этой процедуре после перемещения файла читаю и анализирую содержимое файла...
while not eof(fN1) do
begin
read(fN3,s);
if (s.VPuska="")and(s.Remont<>"Простой") then
 begin
 str(c,ns);
 s.Npp:=ns;
 if c<10 then s.Npp:="00"+ns;
 if (c>9)and(c<100) then s.Npp:="0"+ns;
 c:=c+1;
 s.Remont:=sd;
 write(fN2,s);
 end;
end;

как быть с этим?



Страницы: 1 2 3 4 вся ветка

Форум: "Прочее";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.598 c
15-1201611389
ZeroDivide
2008-01-29 15:56
2008.03.02
Киньте в меня формой 2-НДФЛ в формате fr3, кому не жалко


2-1202226967
_Shuler_
2008-02-05 18:56
2008.03.02
копирование из MsWord


15-1201376098
Kerk
2008-01-26 22:34
2008.03.02
Алгоритм Витерби


2-1202231061
undo
2008-02-05 20:04
2008.03.02
Как и куда сохранить то что я создал в ран тиме?


2-1201987049
AntonUSAnoV
2008-02-03 00:17
2008.03.02
Запустить обработчик...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский