Создание идентификатора
- 
				Shtr1h_KoT
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 30 сен 2016, 19:00
- Репутация: 0
							 Создание идентификатора
						Создание идентификатора
		
													
							
						
			
			
			
			
			Есть векторка с атрибутами, нужно создать идентификатор в созданной символьной колонке, назовем ее "G". идентификатор записывается путем соединения значения других колонок a,b,c,d,e,f, т.е g=a+b+c+d+e+f. Причем a,...,f - десятичные. a(2.0), b(3.0), c(3.0),d(3.0),e(4.0),f(3.0). К тому же разделение должно производится путем разделения их пробелами или нулями. Пример : a-54, b-34, c-184, d-1, e-304, f-212. Результат : G = 54 34184  1 304212. В итоге получилось 18 символов. В бейзеке мало шарю, но что то уже пишу. Вечером постараюсь приложить код к теме, который некорректно работает. Заранее спасибо!
			
			
									
						
										
						- 
				freeExec
- Гуру
- Сообщения: 1195
- Зарегистрирован: 23 апр 2011, 10:32
- Репутация: 205
- Откуда: Ульяновск
Re: Создание идентификатора
Код: Выделить всё
Dim G = Str(A) + " " + Str(B) + Str(C) + " " + Str(E) + Str(F)- 
				Boris
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Создание идентификатора
Все же автор хотел ВСЕ колонки разделить нулями(
 ) или пробелами. Даже, если в примере сделал не совсем так.
 ) или пробелами. Даже, если в примере сделал не совсем так.Поскольку формально вы ему уже ответили, то рискну указать на странность исходных данных и желания автора:
1. команды Мапбасика тут конечно необходимы, но вот программировать на нем - это уже избыточно. Для получения результата хватит обычного запроса SQL или если "твердая" колонка все же необходима, то запроса Update.
2. Разделять нулем? Да еще данные разной разрядности - давно не видел. Хоть бы к единому формату "000" привели сперва, в ином случае - это что угодно, только не идентификатор в значении "уникальное поле, при условии уникальности всех колонок".
3. А почему поля в два или три разряда без десятичных знаков названы десятичными? Они даже Integer не являются - SmallInt вполне достаточно.
4. Для получения заявленной разрядности в 18 символов следует связать между собой результат функции Format$
Код: Выделить всё
Format$(54,"00\ ")+Format$(34,"000\ ")+ ... + Format$(212,"000")Код: Выделить всё
Update [table] Set G=Format$(a,"00\ ")+Format$(b,"000\ ")+ ... + Format$(f,"000")- 
				Shtr1h_KoT
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 30 сен 2016, 19:00
- Репутация: 0
Re: Создание идентификатора
Спасибо, сделал.
 
 
 
 
Вот вообщем, что хотел. Была идея с функцией, но их пока не умею правильно применять.
Завтра попробую результат на деле.
			
			
									
						
										
						Так как работаю в команде объяснять каждому, как делать Sql запросы очень проблематично. А тут кнопку сделал и пусть все по ней тыкают
 
 
Ну да, глупая была затея
 
 
Такую требуют, я бы все в короткие загнал
Вот вообщем, что хотел. Была идея с функцией, но их пока не умею правильно применять.
Завтра попробую результат на деле.
Код: Выделить всё
	Alter table tab (Modify G  char(18)) 
	Fetch First From tab
	ColName = ""
 	
	space1 = Space$(1)
	space2 = Space$(2)
	space3 = Space$(3)
	For i = 1 To TableInfo(tab, TAB_INFO_NROWS)
		
	Fetch Rec i From Tab
'________________________________________________________________________
		lcA =Str$(Tab.A)
'________________________________________________________________________
		If Len(Str$(Tab.B)) = 1 Then
			lcB =space2 + Str$(Tab.B)
		ElseIf Len(Str$(Tab.B)) = 2 Then
			lcB =space1 + Str$(Tab.B)
		Else			
			lcB =Str$(Tab.B)
		End If
'________________________________________________________________________
		
		If Len(Str$(Tab.C)) = 1 Then
			lcC=space2 + Str$(Tab.C)
		ElseIf Len(Str$(Tab.C)) = 2 Then
			lcC=space1 + Str$(Tab.C)
		Else			
			lcC=Str$(Tab.C)
		End If
'________________________________________________________________________
		
		If Len(Str$(Tab.D)) = 1 Then
			lcD=space2 + Str$(Tab.D)
		ElseIf Len(Str$(Tab.D)) = 2 Then
			lcD=space1 + Str$(Tab.D)
		Else			
			lcD=Str$(Tab.D)
		End If
'________________________________________________________________________
		
		If Len(Str$(Tab.E)) = 1 Then
			lcE=space3 + Str$(Tab.E)
		ElseIf Len(Str$(Tab.E)) = 2 Then
			lcE=space2 + Str$(Tab.E)
		ElseIf Len(Str$(Tab.E)) = 3 Then
			lcE=space1 + Str$(Tab.E)
		Else			
			lcE=Str$(Tab.E)
		End If
'________________________________________________________________________
		
		If Len(Str$(Tab.F)) = 1 Then
			lcF=space2 + Str$(Tab.F)
		ElseIf Len(Str$(Tab.F)) = 2 Then
			lcF=space1 + Str$(Tab.F)
		Else			
			lcF=Str$(Tab.F)
		End If
'________________________________________________________________________
		ColName = lcA + lcB+lcC+lcD+lcE+lcF
 		Update Tab
			Set G = ColName
			Where RowID = i
		Next
		Commit Table Tab
close all interactive
- jerry-maori
- Гуру
- Сообщения: 585
- Зарегистрирован: 22 авг 2012, 17:02
- Репутация: 143
- Откуда: Нижний Новгород
Re: Создание идентификатора
разделять нулями, пробелами, табуляциями -- это раскладывать грабли...
есть жи нижнее подчёркивание...
			
			
									
						
										
						есть жи нижнее подчёркивание...
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя
