Форум: "Начинающим";
Текущий архив: 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