Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.22;
Скачать: CL | DM;

Вниз

Ошибка "Invalid floating point operation"   Найти похожие ветки 

 
Mamochka ©   (2006-10-03 09:31) [0]

Здравствуйте! Помогите пожалуйста...

...
NNOPER:=FieldByName("NNOPER").AsInteger;
...
Именно в этой строчке возникает вот такая ошибка "Invalid floating point operation"

Что это и как с этим бороться?


 
clickmaker ©   (2006-10-03 09:35) [1]

а какой тип у поля NNOPER? и есть ли оно в DataSet, чей FieldByName?


 
Mamochka ©   (2006-10-03 09:36) [2]


> clickmaker

NNOPER имеет тип Integer


 
novill ©   (2006-10-03 09:37) [3]

Посмотреть что находится в поле пробовал?
типа
showmessage(FieldByName("NNOPER"). asstring)


 
Mamochka ©   (2006-10-03 09:39) [4]


> novill

Пробовал, дело втом что там должен быть номер операции, но он не присваивается сразу вылетает ошибка


 
clickmaker ©   (2006-10-03 09:44) [5]


> [4] Mamochka ©   (03.10.06 09:39)

что за набор данных-то? Query, Table...? Есть там это поле вообще?


 
pavel_guzhanov ©   (2006-10-03 09:45) [6]

Насколько я понял, у тебя в базе номер операции должен присваиваться автоматически. Скорее всего он не присваивается. и ты пытаешься считать значение поля, равное null, но считать его как Integer. Null не может перевестись в Integer. Хотя, про автоматическое присвоение-это я наверное напрасно... автоматически, или его присваивает твоя программа - это без разницы. Все равно вероятнее всего, он не присвоен


 
novill ©   (2006-10-03 09:46) [7]

Услуги телепатов дорого тебе обойдутся :)

Потому либо давай код, либо трассировщик в руки...


 
Mamochka ©   (2006-10-03 09:47) [8]


> clickmaker


CountList.Clear;

tbMain.First;

For N:=0 To tbMain.RecordCount-1 Do
Begin {For N}
FillChar(CountItem,SizeOf(CountItem),#0);
With tbMain, CountItem Do
Begin {With tbMain}

Edit;
FieldValues["STATUS"]:=1;

NNOPER:=FieldByName("NNOPER").AsInteger;

TASK:=FieldByName("TASK").AsString;
DATAOPER:=FieldByName("DATAOPER").AsDateTime;
NNDOC:=FieldByName("NNDOC").AsString;
DT_SCHET:=FieldByName("DT_SCHET").AsString;
DT_CODE:=FieldByName("DT_CODE").AsString;
KT_SCHET:=FieldByName("KT_SCHET").AsString;
KT_CODE:=FieldByName("KT_CODE").AsString;
SUMMA:=FieldByName("SUMMA").AsFloat;
End;  {With tbMain}


 
Mamochka ©   (2006-10-03 09:49) [9]


> pavel_guzhanov

Номер операции берется из файлика


 
clickmaker ©   (2006-10-03 09:51) [10]


> [8] Mamochka ©   (03.10.06 09:47)

якорный бабай...
я не просил код. Я спрашивал, какого типа у тебя DataSet, и посоветовал проверить, есть ли там это поле (в редакторе полей посмотри) и есть ли в нем значение. Другими средствами. Какими - зависит от того, что за базу ты юзаешь.
Это всё, кстати, надо было в самом начале описать. Правила хорошего тона


 
pavel_guzhanov ©   (2006-10-03 09:52) [11]


> Номер операции берется из файлика


Из файлика он вставляется в базу? Уверен? Проверь...


 
novill ©   (2006-10-03 09:59) [12]

Так ты в базу пишешь или из базы читаешь?
С этим определись.
Если читаешь, то зачем Edit, если хочешь писать, почему читаешь?


 
Mamochka ©   (2006-10-03 10:00) [13]


> pavel_guzhanov


то что номер берется из файлика это точно


 
pavel_guzhanov ©   (2006-10-03 10:04) [14]


> то что номер берется из файлика это точно

Если судить по коду, приведенному в [8], ты его пытаешься получить из базы данных, из поля "NNOPER". Еще раз спрошу, ты уверен, что "из файлика" этот номер вставлен в базу?


 
Mamochka ©   (2006-10-03 10:05) [15]


> novill


из Главной базы main.dbf читаю, в другую базу mainsd.dbf пишу :о)


 
Mamochka ©   (2006-10-03 10:11) [16]


> pavel_guzhanov


дае есть такой файлик nnoper.inc в котором есть номер операции

смотри процедуру...

Procedure GetNNOPER;
Var
hFile:Integer;
FullIniFileName:String;
CurrentNNOPER:Integer;
CurrentNNOPERStr:String;
Buff:Array[0..9] Of Byte;
N:Integer;
Begin {GetNNOPER}
FullIniFileName:=WorkPath+IniPath+IniFileName;
If Not FileExists(FullIniFileName) Then
Begin {If Not}
ShowMessage("Не могу найти файл"+FullIniFileName+"!");
Application.Terminate;
End;  {If Not}

hFile:=-4;
While hFile < 4 Do
hFile:=FileOpen(FullIniFileName,fmOpenReadWrite);

FileRead(hFile,Buff,SizeOf(Buff));

For N:=9 DownTo 0 Do
CurrentNNOPERStr:=Char(Buff[N])+CurrentNNOPERStr;

CurrentNNOPER:=StrToInt(CurrentNNOPERStr);
NNOPER:=CurrentNNOPER;
Inc(CurrentNNOPER);
CurrentNNOPERStr:=IntToStr(CurrentNNOPER);

FillChar(Buff,SizeOf(Buff),#32);
For N:=9 DownTo SizeOf(Buff)-Length(CurrentNNOPERStr) Do
Buff[N]:=Ord(CurrentNNOPERStr[N]);

FileSeek(hFile,0,0);
FileWrite(hFile,Buff,SizeOf(Buff));
FileClose(hFile);

End;


 
clickmaker ©   (2006-10-03 10:19) [17]


> [16] Mamochka ©   (03.10.06 10:11)

не видно связи между приведенным кодом и FieldByname...


 
pavel_guzhanov ©   (2006-10-03 10:24) [18]


> Mamochka ©   (03.10.06 10:11) [16]

Ну и где это значение пишется в базу?


 
Mamochka ©   (2006-10-03 10:24) [19]


> clickmaker


:о)

есть готовая база MainSd.dbf в которой есть поле  NNOPER

из файла берется номер операции вставляется в базу MainSd.dbf

почему не вставляется не знаю пишет ошибку.

Может кто-нибудь скажет что эта ошибка означает
потому, что поле NNOPER существует


 
Mamochka ©   (2006-10-03 10:27) [20]


> pavel_guzhanov


АААА я не знаю программа воооообще не мая и человека который писал ее уже не найти, так что спосить можно только увас :о), нужно сделать чтоб работала

Извените что так резок... нервы просто на пределе...


 
clickmaker ©   (2006-10-03 10:27) [21]


> [19] Mamochka ©   (03.10.06 10:24)

а где код вставки?


 
novill ©   (2006-10-03 10:32) [22]

Mamochka
Ты так и не написал,
1 зачем делаешь Edit таблицы, которую читаешь, и не записываешь изменения?
2 что выводит shwmessage?


 
pavel_guzhanov ©   (2006-10-03 10:35) [23]

поле NNOPER существует, но есть ли в нем значение, это не понятно. Судя по ошибке, его там нет. Кода, который пишет туда значение, я тоже не увидел. Может быть ты считаешь, что пишешь значение вот в этой строке:
NNOPER:=FieldByName("NNOPER").AsInteger;
так нет, тут ты считываешь это значение. Чтобы записать, надо присвоение перевернуть:
FieldByName("NNOPER").AsInteger:=NNOPER;


 
Mamochka ©   (2006-10-03 10:36) [24]

Удалено модератором
Примечание: Создание пустых сообщений


 
Mamochka ©   (2006-10-03 10:41) [25]


> novill

shwmessage выводит 14 значное число


 
Mamochka ©   (2006-10-03 10:45) [26]


> pavel_guzhanov

А вот если убрать Edit то новая ошибка :о) "DataSet not in edit or insert mode"


 
Mamochka ©   (2006-10-03 10:49) [27]

Интересно, что если строчку NNOPER:=FieldByName("NNOPER").AsInteger; за ремить, то программа начинает работать вроде как бы :о)


 
clickmaker ©   (2006-10-03 10:52) [28]

каша какая-то в голове...
Ни вопрос нормально задать, ни разобраться попытаться


 
pavel_guzhanov ©   (2006-10-03 10:58) [29]


> shwmessage выводит 14 значное число

Integer может быть только десятизначным. Значит, в строке чтения измени тип с AsInteger на AsFloat? а переменную NNOPER объяви как Double


 
Mamochka ©   (2006-10-03 11:06) [30]


> pavel_guzhanov


ЯЯЯХУУУУУУУУУУУУУУУУУУУ

Слушай, ты гений, не ты просто гений, работает, еще как работает
спасибо спасибо, я товй должник :о)


 
Mamochka ©   (2006-10-03 11:11) [31]


> pavel_guzhanov


да вот только номер операции из файлика стал пропадать... :о)


 
pavel_guzhanov ©   (2006-10-03 11:18) [32]


> да вот только номер операции из файлика стал пропадать..
> .

покажи код того, как номер операции из файлика переносится в базу


 
Mamochka ©   (2006-10-03 11:33) [33]


> pavel_guzhanov

Procedure TfmMain.SaveItemToTable(CountItem:TCountItem);
Begin {SaveItemToTable}
With fmMain.tbMainSD Do
Begin {With fmMain}
Append;
FieldValues["NNOPER"]:=CountItem.NNOPER;
FieldValues["TASK"]:=CountItem.TASK;
FieldValues["DATAOPER"]:=StrToDate(fmMain.meDate.Text);
FieldValues["NNDOC"]:=WinToDOS(fmMain.edNNDOC.Text);
FieldValues["DT_SCHET"]:=CountItem.DT_SCHET;
FieldValues["DT_CODE"]:=CountItem.DT_CODE;
FieldValues["KT_SCHET"]:=CountItem.KT_SCHET;
FieldValues["KT_CODE"]:=CountItem.KT_CODE;
FieldValues["SUMMA"]:=CountItem.SUMMA;
//NameOperBuff:="1";
//NameOperBuff[1]:=Chr(222);
//FieldValues["NAMEOPER"]:=NameOperBuff;
FieldValues["NAMEOPER"]:=WinToDOS("распр. o6щ/т. затрат");
FieldValues["VSUMMA"]:=CountItem.VSUMMA;
FieldValues["VCURS"]:=1;
FieldValues["USER_DATE"]:=Date;
FieldValues["STATUS"]:=CountItem.STATUS;
Post;
End;  {With fmMain}
End;  {SaveItemToTable}


 
pavel_guzhanov ©   (2006-10-03 11:43) [34]

не вижу, где он тут пропадать может :0((


 
Mamochka ©   (2006-10-03 11:45) [35]


> pavel_guzhanov

наверно он пропадает гдето сдесь Mamochka ©   (03.10.06 10:11) [16]


 
Mamochka ©   (2006-10-03 11:50) [36]


> pavel_guzhanov

вот смотри принцеп такой есть номер операции который лежит в файле
програма должна взять этот номер операции прибавить к нему 1 (единицу) и сохранить в тотже файлик


 
clickmaker ©   (2006-10-03 11:57) [37]


> програма должна взять этот номер операции прибавить к нему
> 1 (единицу) и сохранить в тотже файлик


tblMain.Edit;
tblMain.FieldByName("NNOPER").AsFloat := tblMain.FieldByName("NNOPER").AsFloat + 1;
tblMain.Post;
tblMain.ApplyUpdates;


 
Mamochka ©   (2006-10-03 12:04) [38]


> clickmaker

нет так нельзя дело втом что номер операции попадет в главную книгу где лежат все проводки, и по этому два одинаковых номера операции быть не должно...:о(


 
clickmaker ©   (2006-10-03 13:42) [39]


> [38] Mamochka ©   (03.10.06 12:04)

ни черта не понял...
Что нужно-то? По какому принципу этот номер взять и куда записать? Новую запись или старую обновить? Если 2-е, так это, что я и написал



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

Текущий архив: 2006.10.22;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.03 c
2-1159770747
mfender
2006-10-02 10:32
2006.10.22
IHTMLDOMNode. nodeType?


2-1159824730
ABS
2006-10-03 01:32
2006.10.22
EAccessViolation


15-1159459101
Nic
2006-09-28 19:58
2006.10.22
Теперь и я не безработный


2-1159976527
ArtemESC
2006-10-04 19:42
2006.10.22
МНОГА указателей...


15-1159674869
Fedia
2006-10-01 07:54
2006.10.22
ссылка на рейтинг функций, аналогов Pos