Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Тип данных [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 для начала понажимать?


Наверх

Титульная страница Поиск, карта сайта Написать письмо