Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 ФАК: стереотипы и типы данных  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Кажется, назрело. Хочется сделать фак с описанием стереотипов, связанных с типами данных. Не очень верится, что его будут читать (ибо кто полезет в факи, если нет вопроса), однако на него будет удобно давать ссылку.

Это подборка стереотипов, которые надо побороть, чтобы правильно пользоваться этими типами данных. А точнее - подборка элементарных сведений, которые надо осознать (а многие не осознают, из-за чего возникают проблемы, ошибки и вопросы).

ЦЕЛЫЕ
1. Есть максимум! У типов Integer и Long он разный.

ДРОБНЫЕ
1. Хранятся приблизительно. Проверять на равенство нельзя.

СТРОКИ
1. От кавычки до кавычки (в селектах кавычки можно одиночные). Кавычка внутри строки - удваивается.
2. Надо отличать переменную (например, значение 5) и ее отформатированное представление ("5").

ДАТЫ
1. Не путать с форматом! Значение переменной и ее отформатированное представление - разные вещи.
2. Целая часть - это число дней. Дробная - доля дня.

ЛОГИЧЕСКИЕ
1. Логическая переменная - это такое же логическое выражение, как результат логической операции. Нет смысла писать x=True, если можно написать просто x.
21 мар 06, 17:17    [2472865]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
barrabas
Member

Откуда: от махмуда
Сообщений: 10533
Владимир Саныч
ЛОГИЧЕСКИЕ
1. Логическая переменная - это такое же логическое выражение, как результат логической операции. Нет смысла писать x=True, если можно написать просто x.

А мне нравится так писать особенно когда true и false сами высвечиваются
21 мар 06, 17:22    [2472887]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
adv
Member

Откуда:
Сообщений: 3333
Если уж делать, то и описать некоторые неочевидные вещи, например:
"строка" + null и "строка" & null
дата +- целое_число
21 мар 06, 17:34    [2472963]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Анатолий Кудрявцев
Member

Откуда: Санкт-Петербург
Сообщений: 1575
Мне кажется было бы полезно ещё и упомянуть о преобразовании типов, особенно применительно к вызовам API-функций. Например как получить указатель на строку и передать его как число.
Например если объявить lParam в PostMessage типа Any, то сторока передастся по адресу, а Long-переменная тоже по адресу или по значению?
Владимир Саныч
Не очень верится, что его будут читать
Не знаю как все, а я бы почитал.
21 мар 06, 17:34    [2472966]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Rivkin Dmitry
Member

Откуда: Israel
Сообщений: 5500
автор
ДРОБНЫЕ
1. Хранятся приблизительно. Проверять на равенство нельзя.

Но если силно хочется, то можно! Определить DecimalPlaces Property и, если в двух таблицах есть, например, поле FNum double, DecimalPlaces = 1, то внесенная запись 464565.2 в обоих таблицах будет сохранена одинаково. Или я не прав?

ДАТЫ
Иногда выгодно хранить дату в целых числах Integer или Long - в минутах или секундах. Точнее, если идет речь не о дате как таковой, а о промежутках времени. Арифметические операции с датами практически невозможны. Т.е. невозможно сложить, например, время в пути автомобиля из разных строк. Но если хранить время поездки в минутах, то все складывается просто. А функция перевода минут в часы и минуты - не сложная.

ЛОГИЧЕСКИЕ
Нужно помнить о баге
If Me.Parent.MyLogCtrl Then - вызывает тяжелый, труднонаходимый баг, заключающийся в том, что окно акса не закрывается
21 мар 06, 17:36    [2472976]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Rivkin Dmitry
Member

Откуда: Israel
Сообщений: 5500
Я тоже думаю, что читать будут!
Еще мне кажется, что стоит дополнить такой документ сравнением типов и их названиями в различных системах: MS Access (VB/ VBA), MS SQL, SQL Server, Oracle...
Не забыть описать проблемы при применении таких типов, как bigint, decimal, smalldatetime, bit без default и т.п.
21 мар 06, 17:46    [2473043]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 19600
я б почитал....
21 мар 06, 17:55    [2473105]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Alexus12
Member

Откуда:
Сообщений: 2868
вложено сопоставление типов данных ACCESS и ORACLE, у кого хватит сил - вставьте нужное в FAQ

К сообщению приложен файл (Converting from Access to Oracle.htm - 11Kb) cкачать
21 мар 06, 17:56    [2473106]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
ё
Guest
думал что знаю про типы и переменные и даже немного умею пользоваться.

но прочитал раз 20 эту фразу:
автор
ЛОГИЧЕСКИЕ
1. Логическая переменная - это такое же логическое выражение, как результат логической операции. Нет смысла писать x=True, если можно написать просто x.


пока понял, речь идет вот о чем:
вместо
if (x=true) then

пишите

if (x) then

уфффф....

сколько это до меня доходило бы, если бы не знал о чем идет речь
:))

от переусердствования добавлю:


вместо
if x then
x=false
else
x=true
endif
пишите x=not x


вообще вместо
If (логическое выражение) then
x=true
else
x=false
endif

пишите x =(логическое выражение)

например x= (y > 125)

и т.д....


строки:
строки фиксированной длины нельзя соединять сами с собой.
т.е. если s - строка фиксированной длины, то выражения вида

s=s+ b
или
s= s & b

не будет изменять содержимого s

а выражения
s=a+ b
или
s= a & b

будут
21 мар 06, 18:24    [2473276]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
barrabas
Владимир Саныч
ЛОГИЧЕСКИЕ
1. Логическая переменная - это такое же логическое выражение, как результат логической операции. Нет смысла писать x=True, если можно написать просто x.

А мне нравится так писать особенно когда true и false сами высвечиваются

А еще вот так пишут:

if x=true then
me!mycontrol.visible=true
else
me!mycontrol.visible=false
end if

- когда можно написать просто

me!mycontrol.visible=x

adv
Если уж делать, то и описать некоторые неочевидные вещи, например:
"строка" + null и "строка" & null
дата +- целое_число

Правда, возникнет проблема повторения с существующими факами. Про + и & написано вот тут:
https://www.sql.ru/faq/faq_topic.aspx?fid=213
вопрос 19

Анатолий Кудрявцев
Мне кажется было бы полезно ещё и упомянуть о преобразовании типов, особенно применительно к вызовам API-функций. Например как получить указатель на строку и передать его как число.
Например если объявить lParam в PostMessage типа Any, то сторока передастся по адресу, а Long-переменная тоже по адресу или по значению?

Увы, у меня нет ответов на эти вопросы. Энибоди может помочь?

Rivkin Dmitry
то внесенная запись 464565.2 в обоих таблицах будет сохранена одинаково. Или я не прав?

Если одинаково вносить одинаковое число в одинаковый тип данных, то занесется одинаково. Проблемы начинаются, когда начинаются вычисления. Например, 1/5 и 0.2 могут оказаться не равны друг другу.

Rivkin Dmitry
Арифметические операции с датами практически невозможны. Т.е. невозможно сложить, например, время в пути автомобиля из разных строк.

Совершенно возможно, без проблем. Если оно хранится как время, без даты.

Rivkin Dmitry
Нужно помнить о баге
If Me.Parent.MyLogCtrl Then - вызывает тяжелый, труднонаходимый баг, заключающийся в том, что окно акса не закрывается

Это да. Только я не помню точную формулировку. Обязательно, чтобы был Parent? Контрол обязан быть чекбоксом? Синтаксис обязательно такой, с точками?

Rivkin Dmitry
Еще мне кажется, что стоит дополнить такой документ сравнением типов и их названиями в различных системах: MS Access (VB/ VBA), MS SQL, SQL Server, Oracle...
Не забыть описать проблемы при применении таких типов, как bigint, decimal, smalldatetime, bit без default и т.п.

Опять же, я не очень рублю в этом.

Alexus12
вложено сопоставление типов данных ACCESS и ORACLE, у кого хватит сил - вставьте нужное в FAQ

Это имеет смысл приводить, если найдем для остальных баз.

Всем промежуточное спасибо!
21 мар 06, 18:26    [2473283]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
ё
вообще вместо
If (логическое выражение) then
x=true
else
x=false
endif

пишите x =(логическое выражение)



ё
строки фиксированной длины нельзя соединять сами с собой.
т.е. если s - строка фиксированной длины, то выражения вида

s=s+ b
или
s= s & b

не будет изменять содержимого s

Интересно.
21 мар 06, 18:28    [2473291]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
ё
Guest
тогда еще несколько строк про строки:

 Dim s As String * 5 ' максимальная длина фиксированной строки - 64 кб
  Dim a As String, b As String
  Dim r As String * 25, ll As String * 25
  '
  
  a = "1"

  s = s + a ' это не пройдет

  b = "234"

  s = a + b 'это пройдет - длины хватает. справа остаются пробелы
  
  a = "11"
  b = "23456"

  s = vbNullString ' это присвоение заполнит фиксированную строку пробелами

  s = a + b 'это пройдет в пределах длины s. заполнение слева.
  
  
  '------------------------------
  'выравнивание по левому краю
  a = Space(25)
  LSet a = "Привет"
  LSet r = "Привет"
  Debug.Print a
  Debug.Print r
  
  'выровнивание по правому краю
  b = Space(25)
  RSet b = "Привет"
  RSet ll = "Привет"
  Debug.Print b
  Debug.Print ll
21 мар 06, 18:57    [2473383]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Хочу сделать одно уточнение. Мне хочется сделать этот фак не как учебник по типам данных (он тогда слишком большой получится), а именно как подборку самых базисных сведений, на которые обычно делают ошибки начинающие.
22 мар 06, 11:38    [2475428]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
ё
Guest
Саныч, что примерно в нем должно быть сверх правил форматирования
дат, чисел и строк для скл-запросов?

с учетом вопросов "интернационализации" - все равно на одну страницу, думаю, не получится.
22 мар 06, 11:56    [2475558]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
ё
Саныч, что примерно в нем должно быть сверх правил форматирования
дат, чисел и строк для скл-запросов?

Всё, что вспомнится как часто встречающиеся грабли в головах у чайников в нашем форуме.
22 мар 06, 11:59    [2475588]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Кстати, по правилам форматирования как раз фак уже есть.
22 мар 06, 12:00    [2475593]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Rivkin Dmitry
Member

Откуда: Israel
Сообщений: 5500
Еще про тип ДАТЫ стоит отметить. Начальная, нулевая дата в разных системах - разная. Т.е. в Аксе
DateSerial(0, 0, 0) = 30/11/1999
TimeSerial(0, 0, 0) = 12:00:00 AM
format(TimeSerial(0, 0, 0), "dd/mm/yyyy hh:nn:ss") = 30/12/1899 00:00:00

А в SQL Server
select cast(0 as datetime) = 1900-01-01 00:00:00.000

Если работать только с таблицами Акса, понятно, никаких проблем нет.
Но если таблицы SQL Server и существуют раздельно поля даты и времени, то при их объединении (сложении) получаем -2 дня, т.к. внесение времени из Акса или VB заполняет поле даты в форате 30/12/1899 ХХ:ХХ:ХХ
И здесь хотелось бы знать, существует ли единый подход к устранению этой проблемы
22 мар 06, 12:09    [2475676]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
ё
Guest
Владимир Саныч
Кстати, по правилам форматирования как раз фак уже есть.

это и есть самые распространенные грабли начинающих.

поэтому и спроcил...

еще стиль надо определить - шпаргалка или учебник.
22 мар 06, 12:14    [2475725]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
ё
Guest
Rivkin Dmitry
Еще про тип ДАТЫ стоит отметить. Начальная, нулевая дата в разных системах - разная. Т.е. в Аксе
DateSerial(0, 0, 0) = 30/11/1999
TimeSerial(0, 0, 0) = 12:00:00 AM
format(TimeSerial(0, 0, 0), "dd/mm/yyyy hh:nn:ss") = 30/12/1899 00:00:00

А в SQL Server
select cast(0 as datetime) = 1900-01-01 00:00:00.000

Если работать только с таблицами Акса, понятно, никаких проблем нет.
Но если таблицы SQL Server и существуют раздельно поля даты и времени, то при их объединении (сложении) получаем -2 дня, т.к. внесение времени из Акса или VB заполняет поле даты в форате 30/12/1899 ХХ:ХХ:ХХ
И здесь хотелось бы знать, существует ли единый подход к устранению этой проблемы


существует.
1) фак на форматирование дат в факах скл-серверного раздела
2) использование параметризованных хранимых процедур и адо.
"естественные типы" нормально принимаются.
22 мар 06, 12:19    [2475772]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Rivkin Dmitry
Member

Откуда: Israel
Сообщений: 5500
ё
Rivkin Dmitry
Еще про тип ДАТЫ стоит отметить. Начальная, нулевая дата в разных системах - разная. Т.е. в Аксе
DateSerial(0, 0, 0) = 30/11/1999
TimeSerial(0, 0, 0) = 12:00:00 AM
format(TimeSerial(0, 0, 0), "dd/mm/yyyy hh:nn:ss") = 30/12/1899 00:00:00

А в SQL Server
select cast(0 as datetime) = 1900-01-01 00:00:00.000

Если работать только с таблицами Акса, понятно, никаких проблем нет.
Но если таблицы SQL Server и существуют раздельно поля даты и времени, то при их объединении (сложении) получаем -2 дня, т.к. внесение времени из Акса или VB заполняет поле даты в форате 30/12/1899 ХХ:ХХ:ХХ
И здесь хотелось бы знать, существует ли единый подход к устранению этой проблемы


существует.
1) фак на форматирование дат в факах скл-серверного раздела
2) использование параметризованных хранимых процедур и адо.
"естественные типы" нормально принимаются.

Так если создавать свой FAQ по этим вопросам, то и снабдить его либо комментариями, либо ссылками
22 мар 06, 12:26    [2475817]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
ё
еще стиль надо определить - шпаргалка или учебник.

Учебник в стиле шпаргалки.
22 мар 06, 12:35    [2475888]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
adv
Member

Откуда:
Сообщений: 3333
Владимир Саныч
Хочу сделать одно уточнение. Мне хочется сделать этот фак не как учебник по типам данных (он тогда слишком большой получится), а именно как подборку самых базисных сведений, на которые обычно делают ошибки начинающие.
Если честно, был бы более интересен вариант, который ты не хочешь
22 мар 06, 12:37    [2475905]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Dark_Segun
Member

Откуда: Чебоксары
Сообщений: 1
FAQ'и разные нужны, FAQ'и разные важны!!!
22 мар 06, 17:11    [2477535]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
Анатолий Кудрявцев
Member

Откуда: Санкт-Петербург
Сообщений: 1575
Про получение адреса переменных отвечаю сам себе.Картинка с другого сайта.
Совершенно случайно наткнулся на статью в msdn, которая описывает эту ситуацию. How To Get the Address of Variables in Visual Basic
24 мар 06, 15:26    [2487051]     Ответить | Цитировать Сообщить модератору
 Re: ФАК: стереотипы и типы данных  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 19600
получить адрес переменной - получили, а как разместить переменную с палученного адреса?

типа
dim i integer
dim a char
dim d char
dim c char


dim s string с адреса i
24 мар 06, 19:23    [2488176]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить