![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тип данных [D7, Win2k, WinXP]
IntruderLab © (2006-04-19 10:45:00)Доброго дня!!!
ситуевина такая, есть функция
function GetNewBlank(sMin : String; sMax : String) : Boolean;
var i : Longint ; sId : String; iMin : Longint; iMax : Longint;
begin
sId := frmMain.adotLIST_BLANK_PACK.FieldByName('lbp_id').AsString;
iMin := StrToInt64(sMin);
iMax := StrToInt64(sMax);
for i := iMin to iMax do
begin
frmMain.adotLIST_BLANK.Insert;
frmMain.adotLIST_BLANK.FieldByName('blank_number_1').AsString := IntToStr(i);
frmMain.adotLIST_BLANK.FieldByName('blank_userid').AsString := frmMain.sUSER_ID;
frmMain.adotLIST_BLANK.FieldByName('blank_status').AsInteger := 5;
frmMain.adotLIST_BLANK.FieldByName('blank_pack').AsString := sId;
frmMain.adotLIST_BLANK.Post;
end;
Result := True;
end;
Длина номера билета 10 символов, мне необходимо сформировать список билетов по их номеру и запихать их в базу, какой типа данных для i применить, так как получается какая то фигня
IntruderLab (2006-04-19 12:47:00) [1]я думаю, что пора закрыть обсуждение, но за помощь спасибо
balepa (2006-04-19 11:56:00) [2]IntruderLab © (19.04.06 11:28) [10]
Integer -2147483648..2147483647 signed 32-bit
Cardinal 0..4294967295 unsigned 32-bit
Type Range Format
Shortint -128..127 signed 8-bit
Smallint -32768..32767 signed 16-bit
Longint -2147483648..2147483647 signed 32-bit
Int64 -2^63..2^63-1 signed 64-bit
Byte 0..255 unsigned 8-bit
Word 0..65535 unsigned 16-bit
Longword 0..4294967295 unsigned 32-bit
IntruderLab (2006-04-19 11:41:00) [3]Ладно, проблему я решил :) не будем вдаваться в подробности почему при разработке не учитывался тип данных, но кому интересно, то функцию я переделал так:
function GetNewBlank(sMin : String; iCount : Integer) : Boolean;
var i: Integer; iMin : Int64; sId : String;
begin
sId := frmMain.adotLIST_BLANK_PACK.FieldByName('lbp_id').AsString;
iMin := StrToInt64(sMin);
for i := 0 to iCount-1 do
begin
frmMain.adotLIST_BLANK.Insert;
frmMain.adotLIST_BLANK.FieldByName('blank_number_1').AsString := IntToStr(iMin);
frmMain.adotLIST_BLANK.FieldByName('blank_userid').AsString := frmMain.sUSER_ID;
frmMain.adotLIST_BLANK.FieldByName('blank_status').AsInteger := 5;
frmMain.adotLIST_BLANK.FieldByName('blank_pack').AsString := sId;
frmMain.adotLIST_BLANK.Post;
iMin:=iMin+1;
end;
Result := True;
end;
Сергей М. (2006-04-19 11:37:00) [4]
> причем здесь это то?
Притом что MSSQL поддерживает Int64-совместимый тип данных, и почему он не был задействован при разработке базы - для меня загадка.
> IntruderLab © (19.04.06 11:23) [9]
> Integer не подойдет
Значит параметры ф-ции должны иметь тип Int64, а не Integer.
Плохиш (2006-04-19 11:34:00) [5]
> IntruderLab © (19.04.06 11:28) [10]
Хм, ну я могу понять почему не отвечают на [1], но вот почему нет ответа на [2] выше моего понимания.
IntruderLab (2006-04-19 11:28:00) [6]function GetNewBlank(sMin : String; sMax : String) : Boolean;
var i, iMin, iMax : Integer; sId : String;
begin
sId := frmMain.adotLIST_BLANK_PACK.FieldByName('lbp_id').AsString;
iMin := StrToInt64(sMin);
iMax := StrToInt64(sMax);
for i := iMin to iMax do
begin
frmMain.adotLIST_BLANK.Insert;
frmMain.adotLIST_BLANK.FieldByName('blank_number_1').AsString := IntToStr(i);
frmMain.adotLIST_BLANK.FieldByName('blank_userid').AsString := frmMain.sUSER_ID;
frmMain.adotLIST_BLANK.FieldByName('blank_status').AsInteger := 5;
frmMain.adotLIST_BLANK.FieldByName('blank_pack').AsString := sId;
frmMain.adotLIST_BLANK.Post;
end;
Result := True;
end;
Для тех кто пытается помочь уменьшением переменных: так все работает до того момента пока число меньше 2147483647, после этого работать перестает
IntruderLab (2006-04-19 11:23:00) [7]Integer не подойдет, повторяю еще раз (слишком маленькое максимальное значение), нужен ответ из типа данных, которым можно заменить Int
balepa (2006-04-19 11:20:00) [8]function GetNewBlank(sMin : String; sMax : String) : Boolean;
А обязательно передавать параметры типа String можно сразу Integer и отпадет необходимость объявлять еще и iMax, iMin
IntruderLab (2006-04-19 11:17:00) [9]СУБД MS SQL Server 2000 а причем здесь это то?
ситуевина вот в чем, в форме задается ранж бланков от стольки до стольки, длина номера 10 символов, какой тип данных подойдет для хранения числа в 10 символов - вот и весь вопрос?
Сергей М. (2006-04-19 11:13:00) [10]
> IntruderLab © (19.04.06 11:12) [5]
СУБД какая ?
Почему не был выбран тип поля BIGINT (или его аналог, если имеется) ?
IntruderLab (2006-04-19 11:12:00) [11]Сергей М. © (19.04.06 11:09) [3]
> какой типа данных для i применить
Это немало зависит от типа данных поля 'blank_number_1'
в базе данных номер у меня nvarchar[10]
IntruderLab (2006-04-19 11:10:00) [12]Вобщем как я подозреваю Integer не поможет так как 10 символов не поместиться, Int64 какую то фигню выдает
Сергей М. (2006-04-19 11:09:00) [13]
> какой типа данных для i применить
Это немало зависит от типа данных поля 'blank_number_1'
MBo (2006-04-19 11:06:00) [14]>iMin : Longint
> iMin := StrTo Int64(sMin);
Это несет какой-то тайный смысл?
Плохиш (2006-04-19 11:05:00) [15]
> var i : Longint; sId : String; iMin : Longint; iMax : Longint;
> iMin := StrToInt64(sMin);
Интересный выбор типов и функций. Может стоит на F1 для начала понажимать?