1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, unit2, unit3, unit4; type TForm1 = class(TForm) MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; vt1: TMenuItem; N7: TMenuItem; procedure N4Click(Sender: TObject); procedure N6Click(Sender: TObject); procedure N5Click(Sender: TObject); procedure vt1Click(Sender: TObject); procedure N7Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var a, b, n, m, i, j: integer; Form1: TForm1; implementation { uses unit2,unit3,unit4; } {$R *.dfm} procedure TForm1.N4Click(Sender: TObject); begin form2.show; end; procedure TForm1.N6Click(Sender: TObject); begin close; end; procedure TForm1.N5Click(Sender: TObject); begin form3.StringGrid1.rowCount := form2.StringGrid1.ColCount; form3.StringGrid1.ColCount := form2.StringGrid2.ColCount; form3.show; end; procedure TForm1.vt1Click(Sender: TObject); var i, j, n, e, f, c: integer; z, z1, z2, fun: real; k: string; begin form4.StringGrid1.rowCount := (form2.StringGrid1.ColCount) + 1; form4.StringGrid1.ColCount := (form2.StringGrid2.ColCount) + 1; for I := 0 to form4.StringGrid1.rowCount - 1 do for j := 0 to form4.StringGrid1.ColCount - 1 do form4.StringGrid1.Cells [i,j]:=''; { Подпись фикс. ячеек } n := form2.StringGrid2.ColCount; for j := 1 to n do begin k := inttostr(j); form4.StringGrid1.cells[j, 0] := 'b[' + k + ']'; end; m := form2.StringGrid1.ColCount; for i := 1 to m do begin k := inttostr(i); form4.StringGrid1.cells[0, i] := 'a[' + k + ']'; end; { Заполнение распределительной таблицы } e := 1; f := 1; c := 0; // z := 0; i := 0; j := 0; repeat z1 := strtofloat(form2.StringGrid1.cells[i, 0]); z2 := strtofloat(form2.StringGrid2.cells[j, 0]); if z1 < z2 then begin form4.StringGrid1.cells[f, e] := floattostr(z1); form2.StringGrid1.cells[i, 0] := '0'; z := (z2 - z1); form2.StringGrid2.cells[j, 0] := floattostr(z); fun := fun + z1 * strtofloat(form3.StringGrid1.cells[f - 1, e - 1]); { Целевая функция } i := i + 1; e := e + 1; c := c + 1; end else begin form4.StringGrid1.cells[f, e] := floattostr(z2); form2.StringGrid2.cells[j, 0] := '0'; z := (z1 - z2); form2.StringGrid1.cells[i, 0] := floattostr(z); fun := fun + z2 * strtofloat(form3.StringGrid1.cells[f - 1, e - 1]); { Целевая функция } j := j + 1; f := f + 1; c := c + 1; end; until n + m - 1 = c; { Целевая функция } form4.label2.caption := floattostr(fun); form4.show; end; procedure TForm1.N7Click(Sender: TObject); var // a: array [1 .. 10, 1 .. 10] of real; n, m, i, j, i0, j0: integer; min, fun, z1, z2, z: real; k: string; x, y: set of byte; begin form4.StringGrid1.rowCount := (form2.StringGrid1.ColCount) + 1; form4.StringGrid1.ColCount := (form2.StringGrid2.ColCount) + 1; for I := 0 to form4.StringGrid1.rowCount - 1 do for j := 0 to form4.StringGrid1.ColCount - 1 do form4.StringGrid1.Cells [i,j]:=''; { Подпись фикс. ячеек } n := form2.StringGrid2.ColCount; for j := 1 to n do begin k := inttostr(j); form4.StringGrid1.cells[j, 0] := 'b[' + k + ']'; end; m := form2.StringGrid1.ColCount; for i := 1 to m do begin k := inttostr(i); form4.StringGrid1.cells[0, i] := 'a[' + k + ']'; end; fun := 0; repeat min := MaxInt; // изначально ставим максимальное число for i := 0 to m - 1 do begin { нахождение min } if i in x then Continue; for j := 0 to n - 1 do begin if j in y then Continue; if (strtofloat(form3.StringGrid1.cells[j, i]) < min) then begin min := strtofloat(form3.StringGrid1.cells[j, i]); i0 := i; j0 := j; end; end; end; z1 := strtofloat(form2.StringGrid1.cells[i0, 0]); z2 := strtofloat(form2.StringGrid2.cells[j0, 0]); if (z1 > 0) AND (z2 > 0) then begin if z1 < z2 then begin form4.StringGrid1.cells[j0 + 1, i0 + 1] := floattostr(z1); form2.StringGrid1.cells[i0, 0] := '0'; // можешь это отключить - не надо z := (z2 - z1); form2.StringGrid2.cells[j0, 0] := floattostr(z); fun := fun + z1 * strtofloat(form3.StringGrid1.cells[j0, i0]); { Целевая функция } include(x, i0); // исключаем строку при последующем поиске минимального значения end; if z1 > z2 then begin form4.StringGrid1.cells[j0 + 1, i0 + 1] := floattostr(z2); form2.StringGrid2.cells[j0, 0] := '0'; // можешь это отключить - не надо z := (z1 - z2); form2.StringGrid1.cells[i0, 0] := floattostr(z); fun := fun + z2 * strtofloat(form3.StringGrid1.cells[j0, i0]); { Целевая функция } include(y, j0); // исключаем столбец при последующем поиске минимального значения end; if z1 = z2 then begin form4.StringGrid1.cells[j0 + 1, i0 + 1] := floattostr(z2); // или z1 - по выбору form2.StringGrid2.cells[j0, 0] := '0'; // можешь это отключить - не надо z := (z1 - z2); form2.StringGrid1.cells[i0, 0] := floattostr(z); fun := fun + z2 * strtofloat(form3.StringGrid1.cells[j0, i0]); { Целевая функция } include(x, i0); // исключаем строку при последующем поиске минимального значения И include(y, j0); // исключаем столбец при последующем поиске минимального значения end; end until min = MaxInt ; { Целевая функция } form4.label2.caption := floattostr(fun); form4.show; end; end. |
Your problem is with the qConsulta2.fieldbyname('valor').asfloat
From my testing your error will occur if the VALOR column is text or varchar in the database table and it contains a Null or zero length string.
My test involved creating a table with VALOR_TEXT and VALOR_FLOAT columns in an MSAccess database. VALOR_TEXT is defined as text and VALOR_FLOAT is defined a double. I wrote code for 4 test cases, 2 illustrate the error (Case1 and Case2) and 2 that provide solutions (Case 3 and Case4). The code is provided below.
procedure TForm1.Case1;
var
f : double;
begin
db.ExecSQL('delete from PARAMETRO');
db.ExecSQL('insert into PARAMETRO (codigoPARAMETRO) values(''IVT'')');
// VALOR_FLOAT and VALOR_TEXT are null
qConsulta2.SQL.Text := 'select * from PARAMETRO';
qConsulta2.Open();
f := qConsulta2.FieldByName('VALOR_FLOAT').AsFloat;
ShowMessage('From Float '+FloatToStr(f));
f := qConsulta2.FieldByName('VALOR_TEXT').AsFloat;
ShowMessage('From Text '+FloatToStr(f));
end;
procedure TForm1.Case2;
var
f : double;
begin
db.ExecSQL('delete from PARAMETRO');
db.ExecSQL('insert into PARAMETRO (codigoPARAMETRO,VALOR_TEXT) values(''IVT'','''')');
// VALOR_FLOAT is null and VALOR_TEXT is '' (zero length string)
qConsulta2.SQL.Text := 'select * from PARAMETRO';
qConsulta2.Open();
f := qConsulta2.FieldByName('VALOR_FLOAT').AsFloat;
ShowMessage('From Float '+FloatToStr(f));
f := qConsulta2.FieldByName('VALOR_TEXT').AsFloat;
ShowMessage('From Text '+FloatToStr(f));
end;
Case3 is directly applicable to fixing your code. By getting the data AsVariant, NullStrictConvert := false
will allow Null values to be converted to float, integer, or string with out an exception.
procedure TForm1.Case3;
var
f : double;
begin
NullStrictConvert := false;
db.ExecSQL('delete from PARAMETRO');
db.ExecSQL('insert into PARAMETRO (codigoPARAMETRO) values(''IVT'')');
// VALOR_FLOAT and VALOR_TEXT are null
qConsulta2.SQL.Text := 'select * from PARAMETRO';
qConsulta2.Open();
f := qConsulta2.FieldByName('VALOR_FLOAT').AsFloat;
ShowMessage('From Float '+FloatToStr(f));
f := qConsulta2.FieldByName('VALOR_TEXT').AsVariant;
ShowMessage('From Text '+FloatToStr(f));
end;
Case4 provides a method for avoiding data conversion as long as the source and target columns are the same type. If they are not the same type, data conversion errors can still occur.
procedure TForm1.Case4;
var
f : double;
begin
NullStrictConvert := false;
db.ExecSQL('delete from PARAMETRO');
db.ExecSQL('insert into PARAMETRO (codigoPARAMETRO) values(''IVT'')');
// VALOR_FLOAT and VALOR_TEXT are null
qConsulta2.SQL.Text := 'select * from PARAMETRO';
qConsulta2.Open();
f := qConsulta2['VALOR_FLOAT'];
ShowMessage('From Float '+FloatToStr(f));
f := qConsulta2['VALOR_TEXT'];
ShowMessage('From Text '+FloatToStr(f));
// avoid data conversion
qCompraDetalle.Open();
qCompraDetalle.Append;
qCompraDetalle['PORCENTAJE_IVA'] := qConsulta2['VALOR_TEXT'];
qCompraDetalle.Post;
end;
When monitoring specific OIDs with a custom SNMP sensor, the sensor shows the error message that »x’ is not a valid floating point’. What does this mean and what can I do about it?
comma
float
oid
prtg
snmp-custom-sensor
Disclaimer: The information in the Paessler Knowledge Base comes without warranty of any kind. Use at your own risk. Before applying any instructions please exercise proper system administrator housekeeping. You must make sure that a proper backup of all your data is available.
|
|
|
Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
… (продолжение следует) …
Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки бан.
Мат в разделе — бан на три месяца…
Конвертация строки в числовой
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Добрый день! Не могу найти способ конвертировать string в тип double. StrToFloat — не подходит, потому что мне нужно конвертировать с разделителем точка. Например var s: string; d: double; begin s := 12.12345 d := FloatToStr(s); выдает ошибку «is not a valid floating point value». Небольшое примечание, программа пишется под Android. Заранее большое спасибо! Сообщение отредактировано: BackUp — 19.11.16, 09:51 |
MBo |
|
BackUp |
|
Возможно вы имели ввиду этот код… procedure TForm1.Button1Click(Sender: TObject); var newVal: Double; CurFamily: TConvFamily; FromType, ToType: TConvType; begin DescriptionToConvFamily(ComboBox1.Items[ComboBox1.ItemIndex], CurFamily); DescriptionToConvType(CurFamily, ListBox1.Items[ListBox1.ItemIndex], FromType); DescriptionToConvType(CurFamily, ListBox2.Items[ListBox2.ItemIndex], ToType); newVal := Convert(StrToFloat(Edit1.Text), FromType, ToType); ShowMessage(Format(‘%g %s’, [newVal, ConvTypeToDescription(ToType)])); end; Но, у меня среда разработки Delphi 10. Он выдает мне новые ошибки(( |
MBo |
|
Второй вариант функции позволяет использовать набор установок, включающий нужный разделитель function StrToFloat(const S: string; const FormatSettings: TFormatSettings): Extended; overload; |
BackUp |
|
Не совсем понятно, какой второй вариант? var s : string; d : Double; begin s := ‘22,767’; // У меня в системе разделитель — точка FormatSettings.DateSeparator:= ‘.’; d:= StrToFloat(s); Попробовал, никаких изменений(( |
MBo |
|
Читаем справку вслух с выражением. По первЫх строках ея видим две перегруженные функции. function StrToFloat(const S: string): Extended; overload; function StrToFloat(const S: string; const FormatSettings: TFormatSettings): Extended; overload; Вторая из них имеет дополнительный параметр. Значит, чтобы использовать именно её, нужно вызывать со вторым параметром Если разделитель в строке запятая, то его и нужно указывать. Т.е. назначить DecimalSeparator, о чём тоже в справке есть. При чём тут DateSeparator? var s : string; d : Double; fs: TFormatSettings; begin s := ‘22,767’; fs.DecimalSeparator := ‘,’; d:= StrToFloat(s, fs); Сообщение отредактировано: MBo — 19.11.16, 15:44 |
BackUp |
|
MBo спасибо за подробный пример, но наверное я не правильно смог объяснить что именно мне нужно. Есть переменная s типа string = ‘22,767’, есть массив типа R: array [1..4]of Double. Мне надо записать эти данные в массив в виде 22.767, т.е. не с «запятой», а через точку! var s : string; d : Double; fs: TFormatSettings; begin s := ‘22.767’; fs.DecimalSeparator := ‘.’; d:= StrToFloat(s, fs); s := ‘22,767’; fs.DecimalSeparator := ‘,’; d:= StrToFloat(s, fs); т.е. при любом раскладе d = 27,767 а мне надо что бы d было равно 27.767 Сообщение отредактировано: BackUp — 19.11.16, 16:43 |
Славян |
|
<можно поставить на автоудаление> |
MBo |
|
Вот сделаешь, как у меня в примере … R[1] := StrToFloat(s, fs); … и всё будет как положено. Отличай числа и их строковое представление. |
BackUp |
|
то ли лыжи не едут… MBo, ты сам пробовал свой пример? Мне нужна ТОЧКА, а там запятая! |
Cfon |
|
ТС жжот |
leo |
|
Цитата BackUp @ 19.11.16, 16:28 т.е. при любом раскладе d = 27,767 а мне надо что бы d было равно 27.767 Это одно и то же число в разном строковом представлении. Число d:double хранится не в строковом виде, а в особом двоичном формате, поэтому ему по барабану какой там у тебя DecimalSeparator. А точка или запятая появляются тогда, когда это число преобразуется в строку. Если на твоем компе используется DecimalSeparator = ‘,’, то соотв-но и все функции преобразования числа в строку по умолчанию будут выдавать значения с разделителем «запятая». Если тебе не нравится это (дурное бухгалтерское) представление, то на своем компе ты можешь поменять разделитель на «точку» через «Панель управления» «Региональные стандарты». Если же ты хочешь, чтобы в твоей программе вещественные числа выводились с точкой, независимо от установленного на компе значения DecimalSeparator, то для этого нужно использовать либо расширенные функции преобразования числа в строку с FormatSettings, либо старую добрую паскалевскую процедуру Str, которая всегда выдает строковое представление числа с точкой независимо от DecimalSeparator. |
BackUp |
|
Прошу прощения))) Пример MBo рабочий. Благодаря объяснениям leo, я вышел из тупика… в коде был мой косяк из-за него программа выбивала ошибку. Спасибо всем за участие, очень помогли |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Общие вопросы
- Следующая тема
[ Script execution time: 0,0355 ] [ 16 queries used ] [ Generated: 13.06.23, 13:11 GMT ]
← →
spogi
(2006-08-02 10:45)
[0]
Что означает это сообщения:
Красный такой круг и внутри белый крестик с надписью — «Is not a valid floating point value»…
Значит, такая вот программа-база, возможно вводить цифры с 000001 до 999999 в формате /000000/. Можно ввести один номер, напр. 001249, или диапазон номеров напр. 001250-002580. Значить каждый раз когда введем новую цифру, или новый диапазон, проверяется не использовалось ли раньше этот номер или один из номеров диапазона. Проверяю я вот таким образом:
Сама База:
—Поял1—Поля2—…—МинНомер—МаксНомер—Кол-во—ПоляН
— ххх — ххх —…— 001250 — 002580 — 1331 — ххх
и т.д.
Беру я каждую запись, проверяю не входит ли туда вводимый мною новый диапазон или какой нибудь один из этих номеров, если да то Прекращаю искать и останавливаюсь, а если нет, беру следующий запись, и т.д. пока не проверю всех записей. После этого добавляю. И работал отлично пока однажды не вышло вот такое сообщение… ПОМОГИТЕ, Спасибо.
И есть ли возможность проделать все это легче?
[ Script execution time: 0,0355 ] [ 16 queries used ] [ Generated: 13.06.23, 13:11 GMT ]
← →
spogi
(2006-08-02 10:45)
[0]
Что означает это сообщения:
Красный такой круг и внутри белый крестик с надписью — «Is not a valid floating point value»…
Значит, такая вот программа-база, возможно вводить цифры с 000001 до 999999 в формате /000000/. Можно ввести один номер, напр. 001249, или диапазон номеров напр. 001250-002580. Значить каждый раз когда введем новую цифру, или новый диапазон, проверяется не использовалось ли раньше этот номер или один из номеров диапазона. Проверяю я вот таким образом:
Сама База:
—Поял1—Поля2—…—МинНомер—МаксНомер—Кол-во—ПоляН
— ххх — ххх —…— 001250 — 002580 — 1331 — ххх
и т.д.
Беру я каждую запись, проверяю не входит ли туда вводимый мною новый диапазон или какой нибудь один из этих номеров, если да то Прекращаю искать и останавливаюсь, а если нет, беру следующий запись, и т.д. пока не проверю всех записей. После этого добавляю. И работал отлично пока однажды не вышло вот такое сообщение… ПОМОГИТЕ, Спасибо.
И есть ли возможность проделать все это легче?
← →
Sergey13 ©
(2006-08-02 10:49)
[1]
В каком нибудь из проверяемых полей не то значение (не того типа, может буква вкралась или еще какой знак), которое ожидалось или нет значения вообще.
← →
spogi
(2006-08-02 11:02)
[2]
Я тоже сперва так подумал, но ищу и не нахожу подобный случай. Записей очень много, но я посмотрел, все таки еще пересмотрю. Но не может ли это быть проблема с перебором записей или какая то еще другая проблема что не дает продолжать проверку? По другому, не перебирая всех записей возможно что-то подобное?
← →
Johnmen ©
(2006-08-02 11:05)
[3]
Где типы полей?
Где код???
← →
Sergey13 ©
(2006-08-02 11:07)
[4]
> [2] spogi (02.08.06 11:02)
При ошибке выведи номер (ключ) записи. В ней и ищи.
Может буква «О» вместо нолика.
← →
Sergey13 ©
(2006-08-02 11:08)
[5]
> [3] Johnmen © (02.08.06 11:05)
Так наверняка поле строковое, а отсыпается на чем нибудь типа StrToInt.
Или мой телепатор можно выбрасывать.
← →
spogi
(2006-08-02 11:11)
[6]
В коде не должно быть проблема, программа 2 недели работает, а типы поля только Кол-во Integer, все остальные поля Стринговые. Я хотел МинЧисло и МаксЧисло тоже делать Integer или какой другой работающий с цифрами, но было проблема с отоброжением в формате /000000/, поэтому взял оба стринговый и в процедурах, перевожу данные в числовой формат, обрабатываю, потом заного в стринг с форматом /000000/ возвращаю…
← →
Desdechado ©
(2006-08-02 11:13)
[7]
«Is not a valid floating point value» не сочетается с «в формате /000000/».
Попытка сохранить в поле не целого, а дробного типа.
← →
spogi
(2006-08-02 11:22)
[8]
Значить, все таки опять придется искать проблему среди записей, просто интересно знаете что, Если ошибка дает в процессе StrToFloat, значить когда-то должно было быть ошибка типа FloatToStr… Беру запись, перевожу в числовой, обрабатываю, перевожу в стринг и сохраняю в базе. А может ли вот как-то ошибочно добавляться запись в ошибочном виде и уже со следующего раза чтоб это стало проблемой???
← →
sniknik ©
(2006-08-02 11:24)
[9]
> В коде не должно быть проблема, программа 2 недели работает …
нашол тоже показатель… мелкософтский IE вон с 90-какогото года работает и? месяца не проходит без нового патча исправляющего старые глюки…
нет, все проблемы именно в коде, неправильно обрабатываеш тип/неотслеживаеш ввод неподходящих для обработки данных/не учитываеш локализацию/… и т.д. все проблемы кода.
← →
Johnmen ©
(2006-08-02 11:43)
[10]
Главная ошибка — хранить в символьных полях числовые данные.
← →
Desdechado ©
(2006-08-02 11:55)
[11]
> Если ошибка дает в процессе StrToFloat, значить когда-то должно было быть ошибка типа FloatToStr
Совсем нет. FloatToStr ошибки перевода не даст, поскольку в строку можно черта лысого запхать, а вот назад….
← →
umbra ©
(2006-08-02 11:56)
[12]
эта ошибка появляется при работе программы самой по себе или при отладке?
← →
spogi
(2006-08-02 13:17)
[13]
Дело в том что, я добавлял все новые номера и по ходу суть не изменился, я опять хочу добавлять новые номера или диапазон номеров, только в этот раз не добавляет, и выдает ошибку. Я подумал, вдруг проблема в записе, тогда это проблема та запись, которую я добавил в самом конце, потому что именно после этого и не смог добавить следующую. Нашел этот запись, проверил, нет проблем! :((
← →
spogi
(2006-08-02 13:19)
[14]
> эта ошибка появляется при работе программы самой по себе
> или при отладке?
Нет, не при отладке, а сама рабочая программа дает ошибку…
← →
spogi
(2006-08-02 15:00)
[15]
Ну что ее это такое? Я даже унашел и удалил последнюю запись и когда захотел заного добавить ее не получилось, опять ошибки…
← →
Lexiy
(2006-08-02 17:53)
[16]
проверь что стоит запятая или точка … скорее всего сдесь ошибка нужно смотреть региональные настройки и смотреть что гонишь во флоат
← →
Плохиш ©
(2006-08-02 19:27)
[17]
Мой телепатор сказал, что у него поле типа char, а строки содержащие пробелы не являются вещественными/целыми числами.
Варианты решения:
1. Изменить тип поля на varchar
2. Использовать функцию trim, StrToFloat(trim(sValue));
← →
Anatoly Podgoretsky ©
(2006-08-02 19:46)
[18]
17 сообщений и ноль кода и нет типов полей, образца записей в них
Партизан
← →
spogi
(2006-08-02 22:55)
[19]
А вот и код … Вообще -то работает, а начало выдавать ошибку…
procedure TNumberInputForm.BitBtn1Click(Sender: TObject);
var
n:Longint;
min,max,TbMin,TbMax:Real;
StrMin,StrMax:String;
P:Boolean;
label 10;
begin
If LabeledEdit3.Text = «0» then Exit;
P:=False;
min:=StrToFloat(LabeledEdit3.Text);
StrMin:=FormatFloat(«000000»,min);
max:=StrToFloat(LabeledEdit4.Text);
StrMax:=FormatFloat(«000000»,max);
If max < min then begin
ShowMessage(«Max ne mojet bit menshe Min!»);
Exit;
end;
DMod.tbNumbers.MasterSource:=nil;
DMod.tbNumbers.First;
If DMod.tbNumbers.RecordCount = 0 then begin
P:=True;
goto 10;
end;
For n:=1 to DMod.tbNumbers.RecordCount do begin
TbMin:=StrToFloat(DMod.tbNumbersN_MIN.Value);
TbMax:=StrToFloat(DMod.tbNumbersN_MAX.Value);
If (min = TbMin) or (max = TbMax) then begin P:=False; end;
If (min < TbMin) and (max > TbMax) then begin P:=False; end;
If (min > TbMin) and (max < TbMax) then begin P:=False; end;
If (min < TbMin) and (max < TbMin) then begin P:=True; end;
If (min > TbMax) and (max > TbMax) then begin P:=True; end;
If P = False then begin
ShowMessage(«Vvedennie vami nomera ranshe ispolzovaloas»
+ #13#10 + «Min i Maks cislo proveryayte, tam oshibka!»);
DMod.tbNumbers.MasterSource:=DMod.DSFirms;
Exit;
end;
DMod.tbNumbers.Next;
end;//end for FOR
DMod.tbNumbers.MasterSource:=DMod.DSFirms;
10:
try
If P = True then begin
With DMod do begin
tbNumbers.Edit;
tbNumbers.Append;
tbNumbersID_Number.Value:=tbFirmsID_Firm.Value;
tbNumbersN_Tarix.Value:=StrToDate(MaskEdit1.Text);
tbNumbersN_Rayon.Value:=DBLookupComboBox1.Text;
tbNumbersN_FirmaAdi.Value:=tbFirmsF_Adi.Value;
tbNumbersN_VOEN.Value:=tbFirmsF_VOEN.Value;
tbNumbersN_Seriya.Value:=LabeledEdit2.Text;
tbNumbersN_MIN.Value:=StrMin;
tbNumbersN_MAX.Value:=StrMax;
tbNumbersN_Count.Value:=StrToInt(LabeledEdit4.Text) — StrToInt(LabeledEdit3.Text) + 1;
tbNumbersN_Mebleg.Value:=tbNumbersN_Count.Value * tbFirmsF_Qiymet.Value;
tbNumbersN_VekaletSerNo.Value:=LabeledEdit1.Text;
tbNumbersN_OdQebzi_MedOrderNo.Value:=LabeledEdit5.Text;
tbNumbers.Post;
tbNumbers.Refresh;
tbFirms.Edit;
tbFirmsF_Count.Value:=tbFirmsF_Count.Value +
StrToInt(LabeledEdit4.Text) —
StrToInt(LabeledEdit3.Text) + 1;
tbFirmsF_Mebleg.Value:=tbFirmsF_Count.Value * tbFirmsF_Qiymet.Value;
tbFirms.Post;
tbFirms.Refresh;
end; //with do begin
end; //if p=true
except
ShowMessage(«V polyax imeetsya oshibki, proveryayte!»);
DMod.tbNumbers.MasterSource:=DMod.DSFirms;
end;//try-except-end
DMod.tbNumbers.MasterSource:=DMod.DSFirms;
end;
← →
sniknik ©
(2006-08-02 23:28)
[20]
> А вот и код … Вообще -то работает, а начало выдавать ошибку…
а вот уже и не надо …
затянутая шутка становится не смешной…
← →
Mike Kouzmine ©
(2006-08-02 23:37)
[21]
TbMin:=StrToFloat(DMod.tbNumbersN_MIN.Value);
TbMax:=StrToFloat(DMod.tbNumbersN_MAX.Value);
← →
Johnmen ©
(2006-08-03 09:12)
[22]
Просто интересно, где учат писать такой код?
← →
Mike Kouzmine ©
(2006-08-03 10:37)
[23]
Johnmen © (03.08.06 09:12) [22] Да ладно. Мой первый был такой же.
← →
Johnmen ©
(2006-08-03 11:54)
[24]
> Mike Kouzmine © (03.08.06 10:37) [23]
>
> Johnmen © (03.08.06 09:12) [22] Да ладно. Мой первый был
> такой же.
Не верю! (с) :)))
← →
Mike Kouzmine ©
(2006-08-03 16:53)
[25]
Johnmen © (03.08.06 11:54) [24] Как сейчас помню 1984 год. Правда делфи не было.
← →
spogi
(2006-08-06 21:49)
[26]
> Просто интересно, где учат писать такой код?
Ну что делать-то? Когда без учителся учишься, получается вот так, странноватый код! :))