Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.07;
Скачать: CL | DM;

Вниз

Тип данных   Найти похожие ветки 

 
IntruderLab ©   (2006-04-19 10:45) [0]

Доброго дня!!!
ситуевина такая, есть функция
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 применить, так как получается какая то фигня


 
Плохиш ©   (2006-04-19 11:05) [1]


> var i : Longint ; sId : String; iMin : Longint; iMax : Longint;


> iMin := StrToInt64(sMin);

Интересный выбор типов и функций. Может стоит на F1 для начала понажимать?


 
MBo ©   (2006-04-19 11:06) [2]

>iMin : Longint
> iMin := StrToInt64(sMin);

Это несет какой-то тайный смысл?


 
Сергей М. ©   (2006-04-19 11:09) [3]


> какой типа данных для i применить


Это немало зависит от типа данных поля "blank_number_1"


 
IntruderLab ©   (2006-04-19 11:10) [4]

Вобщем как я подозреваю Integer не поможет так как 10 символов не поместиться, Int64 какую то фигню выдает


 
IntruderLab ©   (2006-04-19 11:12) [5]

Сергей М. ©   (19.04.06 11:09) [3]
> какой типа данных для i применить
Это немало зависит от типа данных поля "blank_number_1"
в базе данных номер у меня nvarchar[10]


 
Сергей М. ©   (2006-04-19 11:13) [6]


> IntruderLab ©   (19.04.06 11:12) [5]


СУБД какая ?

Почему не был выбран тип поля BIGINT (или его аналог, если имеется) ?


 
IntruderLab ©   (2006-04-19 11:17) [7]

СУБД MS SQL Server 2000 а причем здесь это то?
ситуевина вот в чем, в форме задается ранж бланков от стольки до стольки, длина номера 10 символов, какой тип данных подойдет для хранения числа в 10 символов - вот и весь вопрос?


 
balepa ©   (2006-04-19 11:20) [8]

function  GetNewBlank(sMin : String; sMax : String) : Boolean;
А обязательно передавать параметры типа String можно сразу Integer и отпадет необходимость объявлять еще и iMax, iMin


 
IntruderLab ©   (2006-04-19 11:23) [9]

Integer не подойдет, повторяю еще раз (слишком маленькое максимальное значение), нужен ответ из типа данных, которым можно заменить Int


 
IntruderLab ©   (2006-04-19 11:28) [10]

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, после этого работать перестает


 
Плохиш ©   (2006-04-19 11:34) [11]


> IntruderLab ©   (19.04.06 11:28) [10]

Хм, ну я могу понять почему не отвечают на [1], но вот почему нет ответа на [2] выше моего понимания.


 
Сергей М. ©   (2006-04-19 11:37) [12]


> причем здесь это то?


Притом что MSSQL поддерживает Int64-совместимый тип данных, и почему он не был задействован при разработке базы - для меня загадка.


> IntruderLab ©   (19.04.06 11:23) [9]
> Integer не подойдет


Значит параметры ф-ции должны иметь тип Int64, а не Integer.


 
IntruderLab ©   (2006-04-19 11:41) [13]

Ладно, проблему я решил :) не будем вдаваться в подробности почему при разработке не учитывался тип данных, но кому интересно, то функцию я переделал так:
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;


 
balepa ©   (2006-04-19 11:56) [14]

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 12:47) [15]

я думаю, что пора закрыть обсуждение, но за помощь спасибо



Страницы: 1 вся ветка

Текущий архив: 2006.05.07;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.045 c
15-1145130006
homm
2006-04-15 23:40
2006.05.07
Мой первый проект на PHP :)


15-1145001120
balepa
2006-04-14 11:52
2006.05.07
Как обратиться к переменной %SYSTEMROOT% ?


2-1145603620
makar
2006-04-21 11:13
2006.05.07
TRichEdit


2-1145512235
wowik_cn
2006-04-20 09:50
2006.05.07
TabbedNotebook - активная вкладка


3-1142327642
hursand
2006-03-14 12:14
2006.05.07
Как бросит текставой файле из запроса таблицей InterBase