Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Тип данных в SQL для целочисленного значения, такой чтобы DELPHI воспринимал?  (Прочитано 12223 раз)
0 Пользователей и 6 Гостей смотрят эту тему.
Fatal_Error
Участник

ru
Offline Offline
Пол: Мужской

« : 09-03-2006 04:35 » 

Столкнулся со следующей проблемой в SQL & DELPHI: для поля "kod" типа INT(уникальный индификатор) генерирую значение следуюшим образом:
--------------------------------------
//снимаю номер следующей записи
TMP_ID:=S_PROF.TABLE_SPR_P.RecNo+1;


DATE_TMP:=DATETOSTR(DATE); кидаю в текстовый формат текушую дату и время
TIME_TMP:=TIMETOSTR(TIME);

//убираю из текущей даты "точки", т.е например дата "02.01.06", получается "020106"
D_1:=COPY(DATE_TMP,1,2); //день
D_2:=COPY(DATE_TMP,4,2); //месяц
D_3:=COPY(DATE_TMP,7,4); //год



//таже самая хрень для времени, т.е например "13:12:54" получается "131254"
//это услови вставил так как время хранится в 7(7:00:00) символах , и 8(13:00:00) естественно
IF LENGTH(TIME_TMP)=8 THEN
BEGIN
T_1:=COPY(TIME_TMP,1,2); //часы
T_2:=COPY(TIME_TMP,4,2); //минуты
T_3:=COPY(TIME_TMP,7,2); //секунды
END;

IF LENGTH(TIME_TMP)=7 THEN
BEGIN
//поэтому здесь ноль и прилепляю, что бы нишло смишение по символам
// здесь к примеру "7:00:00" становится как "07:00:00" и всё нормально разбивается
T_1:=COPY('0'+TIME_TMP,1,2); //часы
T_2:=COPY('0'+TIME_TMP,4,2); //минуты
T_3:=COPY('0'+TIME_TMP,7,2); //секунды
END;

//формирую сам код уникальный
KOD:=STRTOINT('4'+D_1+D_2+D_3+T_1+T_2+T_3+INTTOSTR(TMP_ID));

// здесь "4" это индификатор базы
---------------------------------------------------------
для примера генерируется следуюший индификатор

-"4"-код таблицы
-"01.02.06" текущая дата
-"12:00:00" текущие время
-"12" номер следующей записи
получается следующий уникальный код  "401020612000012"
----------------------------------
так вот проблема состоит в том что...цисло получается сильно длинным , и я немогу записать его в базу.
какие типы в SQL можно задействовать чтобы хранить это целочисленное число (401020612000012)Не понялНе понялНе понял так что бы и делфи воспринимал этот тип данных.
« Последнее редактирование: 15-12-2007 16:58 от Алексей1153++ » Записан
sega
Гость
« Ответ #1 : 09-03-2006 06:12 » 

попробуй bigint это MS SQL
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #2 : 09-03-2006 06:23 » 

СУБД какая?
Почему идентификатор определяется временем? Не проще ли использовать round(now()*60*60*24) (количество секунд от "начала времен")?
Записан

Удачного всем кодинга! -=x[PooH]x=-
Fatal_Error
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 10-03-2006 01:45 » 

Не проще ли использовать round(now()*60*60*24) (количество секунд от "начала времен")?
Да тоже вариант. Базу данных использую MS SQL. Я хочу хроанить целочисленное значение в байтах? Как это зделать. Для добовление в базу значения поля KOD. пишу так table.fieldbyname('KOD').as{здесь незнаю какой типо поставить}:=strtoint(KOD); и какой типо поля выбрать в самой базе ..для хранения целочисленного значения в байтах?
« Последнее редактирование: 15-12-2007 16:59 от Алексей1153++ » Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #4 : 10-03-2006 06:43 » 

ну вот описание типов
Код:
bigint 	Integer data from -2^63 through 2^63-1 	
int Integer data from -2^31 through 2^31 - 1
smallint Integer data from -2^15 through 2^15 - 1
tinyint Integer data from 0 through 255
bit Integer data with either a 1 or 0 value
отсюда http://www.databasejournal.com/features/mssql/article.phpr/2212141
думаю int будет достаточно

а что значит "хроанить целочисленное значение в байтах?" что за способ хранения такой?
Записан

Удачного всем кодинга! -=x[PooH]x=-
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #5 : 10-03-2006 06:45 » 

Цитата
table.fieldbyname('KOD').as{здесь незнаю какой типо поставить}:=strtoint(KOD);
по-моему table.fieldbyname('KOD').as{здесь незнаю какой типо поставить} только для чтения. А чтобы сохранить значение в таблице тебе надо использовать SQL (update или insert)
« Последнее редактирование: 15-12-2007 17:00 от Алексей1153++ » Записан

Удачного всем кодинга! -=x[PooH]x=-
Fatal_Error
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 10-03-2006 06:54 » 

fieldbyname(<имя поля>).<тип данных>-хз...я с помошью него без проблем данные добовляю в базу. только перед этим метод edit, append, или insert применяешь а для подтверждения post. я разобрался с проблемой тип данных в базе взял bigint , а для формирования уникального кода взял:
-"4"-код таблицы
-"01.02.06" текущая дата
-"12:00:00" текущие время
-"12" номер следующей записи
-------------------------
сократил код:
"код таблицы взял+номер дня+плюс номер месяца+секунды времени системного+номер следующей записи".
код короче стал..и уникальность сохранилась
 для примера получилось "401020012"...

спасибо за помошь=))) и отзывчивость
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #7 : 10-03-2006 07:06 » 

А зачем тебе самому (да еще и зависимое от даты) ключевое поле создавать? Это особенность задачи?
Не проще ли в свойствах столбца задать автоинкримент "IDENTITY increment"
Записан

Удачного всем кодинга! -=x[PooH]x=-
Fatal_Error
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 10-03-2006 07:24 » 

Автоинкрементный тип я и так использую, т.е. у меня есть два поля уникальных посути ID(автоинкрементный)-задаётся автоматически и ID_KEY_GEN(bigint)-геннерирую сам.
Да, это связано с самой задачей которую надо решить. Есть две MS SQL базы. находятся они на разных концах города..связь между серваками тока по модему. так вот данные надо пересылать из одной базы в другую. если брыть автоинкрментный типо то есть  возможность совподения кодов....короче вся эта лабуда для синхронизации..запись выгружается в текстовый файл..отправляется по мылу..с кодом присвенным там же..приходит в центральную базу..грузится из текстового файла в базу...смотрится код..и заменяется на сгенерированный мною..потом шлётся обратно..таким образом синхранизация достигается..короче..там замута конкретная..спасибо за помошь! 
Записан
Fatal_Error
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 10-03-2006 07:29 » 

Темболе на самом деле баз данных много....39 ..если быть точнее..и вся инфа стикается в главную...так что здесь для сохранения целостности п пришлось замутить ..такое ключевое..поля...по заданию..есчё должно учитыватся..то что..в подчинённых базах.эти коды должны совподать..с кодами в центральной базе...это очень важно.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines