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

Вниз

Ошибка "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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.061 c
2-1159512427
aht
2006-09-29 10:47
2006.10.22
Удаление строки в StringGrid


6-1148550756
борменталь
2006-05-25 13:52
2006.10.22
широковещательные сообщения


6-1149075767
DelphiN!
2006-05-31 15:42
2006.10.22
Отсылка письма с вложением через Indy 10


2-1160208207
iamdanil
2006-10-07 12:03
2006.10.22
memo в webbrowser


2-1159966585
WoW
2006-10-04 16:56
2006.10.22
Указатели....





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский