Разговоры не по теме. Флуд

Модераторы: Лабутин Сергей Евгеньевич, Алек(андр

Re: Разговоры не по теме. Флуд

Сообщение Ручей » 24 окт 2012 22:35

Некоторые проги, возьмём опять Imos, базируются на создании параметрических моделях. Как я понимаю, у них нет прототипов таких, как в К3, т.е. нет макросов прототипов.
Я понимаю принцип такой параметризации на примере простого шкафа, когда его конструируешь, потом задаёшь формулы связей деталей в зависимости от других объектов.
Это самый просто вариант, когда можно лишь изменить размеры, но нельзя изменить наполнение ниш. Думаю, что я бы смог написать такой модуль. Наверно. Даже емного представляю структуру таблицы такой параметрической модели. Но в таком деле важно и то, что реализовано в Имос - это изменение типа заполнения ниш. Там создаются типы переменных для ниш. Механизм создания я не знаю, не имел дело.
В чём вопрос.
У вас такого метода создания парам моделей нет. Когда отвечали, что это слишком сложно. Сложно, но можно? или вы не умете, не знаете, как это реализовать?
Есть вообще представления, как это устроенно?
Механизм модуля создания парам моделе я представляю так.
Обычным образом конструируешь шкаф. Затем, создавая из него парам модель, указываешь детали и задаёшь параметры размеров и координат в виде переменных, констант, формул зависимости от других переменных. Всё это заносится в таблицу. Таким образом, мы имеем файл со структурой таблицы. И мы имеем лишь один модуль реконструкции модели по табличным данным.
Что бы воссозданную модель можно было редактировать, как параметрическую модель, а не что бы после создания это были разрозненные детали, их надо объеденить в группу и дать атрибут парам модели.
Я вообще верно имею представление о парам моделях?
Сложность в задании переменной ниши в том, что как определять эту нишу? как заносить её в таблицу? Ведь и внутри ниши может быть переменная ниша, а в той другая и так до бесконечности.
Ручей
 
Сообщения: 883
Зарегистрирован: 15 июл 2011 19:55

Re: Разговоры не по теме. Флуд

Сообщение Рыжий Пёс » 25 окт 2012 11:11

В целом правильно, только таблица должна иметь иерархическую структуру, тогда можно будет вкладывать в изделие сколько угодно сборочных единиц (ящиков, полок, вешалок). Ведь, фактически, любая панель является сборочной единицей: плита+кромка+крепёж. Сам мечтаю сделать такую вещь, в К3 для этого все возможности есть. Нет времени у пользователей(у меня) и желания у разработчиков.
Аватара пользователя
Рыжий Пёс
 
Сообщения: 360
Зарегистрирован: 06 фев 2010 00:11

Re: Разговоры не по теме. Флуд

Сообщение Ручей » 25 окт 2012 12:15

Есть пример такой таблицы? Каким образом иерархия делается?
Ручей
 
Сообщения: 883
Зарегистрирован: 15 июл 2011 19:55

Re: Разговоры не по теме. Флуд

Сообщение Рыжий Пёс » 26 окт 2012 12:03

На самом деле, это весьма непросто. У каждого объекта должны быть связи с объектом-родителем и набор свойств: наследуемых и уникальных.
Так в 5 минут не опишешь. Вот для начала можно почитать здесь Ну и так далее.
Аватара пользователя
Рыжий Пёс
 
Сообщения: 360
Зарегистрирован: 06 фев 2010 00:11

Re: Разговоры не по теме. Флуд

Сообщение Ручей » 16 янв 2013 15:36

Версия 6.4
В наборе скриптов часто встречается функция (или что-то другое) K3F.Display
Что это такое? Описание как функции нигде нет.
Ручей
 
Сообщения: 883
Зарегистрирован: 15 июл 2011 19:55

Re: Разговоры не по теме. Флуд

Сообщение Ручей » 17 янв 2013 12:51

Не подскажите по одной проблеме в скрипте?
Вот код скрипта:
Код: Выделить всё
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\Program Files\GeoS\K3-Мебель ПКМ 64\Data\PKM\Proto\";Extended Properties=dBase IV
' Набор глобальных переменных
Dim objCn            'Обект - соединение с базой
Dim ObjExc         'Объект Excel
Dim dbPrice         'Имя базы с прайсом
Dim dbOut            'Имя выводной базы
Dim Path            'Путь для сохранения

Dim MaxElements ' Максимальное число строк в табличке ++23.12.2004
Dim NowElements  ' Сколько уже показано   ++23.12.2004
Dim LastPageRow  ' Последняя строка на странице   ++23.12.2004
Dim NumTablesOnPage 'Число страниц на таблице   ++23.12.2004

'=============== СТАРТОВАЯ ФУНКЦИЯ ======================
'Входные параметры для выполнения скрипта:
' szWMFPath - путь до картинки с WMF
' szPath    - путь до DBF файлов
' szOutTbl  - имя файла bOutTbl
' szPrice   - имя DBF c прайсом
' i         - номер листа
'========================================================

Sub DoForma(szWMFPath,szPath,szOutTbl,szPrice,client,mail)
   MaxElements = 23   'Всего строк в таблице (от 1 до 23) ++23.12.2004
   NowElements = 0      '++23.12.2004
   LastPageRow = 57   'Сдвиг до следующего листа в терминах строк ++23.12.2004
   NumTablesOnPage = 1 ' Пока число таблиц на листе ++23.12.2004
   Path = szPath


   DoConnectBase(szPath),(szOutTbl),(szPrice)' Подсоединение к базе данных
   CreatTable()                                             'Создадим заготовку таблицу
   FillTbl()                                                   'Заполним заготовку таблицу
   Set ObjExc = CreateExcel("Клиент")            ' Документ Excel
   FillExcel(ObjExc)                                       ' Заполним документ Excel
'   InsertWmfPicture(szWMFPath),(nScale)         ' Вставка картинки в шаблон
'   DoFillForma(nDet)
'   FinishForma()
'   objCn.Close
End Sub

'========================================================
' Подсоединение к базе данных
'========================================================
Function DoConnectBase(szPath, szOutTbl, szPrice)

   ' Переименуем .ptm в более удобоваримое
   Set Fobj = CreateObject("Scripting.FileSystemObject")
   Fobj.CopyFile szPath&"\"&szPrice, szPath&"\"&"TmpShkaf.dbf"
   Set Fobj = Nothing
   
   dbPrice = "TmpShkaf.dbf"
   dbOut = szOutTbl

   ' Процесс подсоединения к базам DBF
   Set objCn = CreateObject("ADODB.Connection")
   objCn.Provider = "Microsoft.Jet.OLEDB.4.0"
   objCn.ConnectionString = "Data Source="+szPath+";Extended Properties=dBase IV"
   objCn.Open
End Function


'========================================================
'Создадим заготовку таблицу
'========================================================
   Sub   CreatTable()

   If (FsoIsFileExist(Path+"SpecTbl.dbf")) Then
      FsoDeleteFile(Path+"SpecTbl.dbf")
   End If   
   
   SQLStr="CREATE TABLE SpecTbl (Mark INTEGER, Name VARCHAR(50), Cnt INTEGER, Unit VARCHAR(6))"
   Set RsetM = CreateObject("ADODB.Recordset")
   RSetM.CursorType = 1
   RSetM.Open SQLStr, ObjCn

   End Sub

'========================================================
'Заполним таблицу данными сцены
'========================================================

Sub FillTbl()
'-- Выбираем   материалы
   SQLStr="SELECT MATNAME FROM ["+dbOut+"],["+dbPrice+_
            "] WHERE (UNITS = 2 OR MATTYPE = 99 OR MATTYPE = 48) AND PRICEID = COD AND ASSEMBLY = 0 GROUP BY MATNAME"   
   Set RSet1=RecordsetDB(ObjCn, SQLStr)
   Rows1 = RSet1.RecordCount
   If Rows1<>0 Then
   SQLStr="INSERT INTO SpecTbl VALUES (1,'Материалы',0,0)"
   RSet1.Close
   RSet1.Open SQLStr, ObjCn
   SQLStr="INSERT INTO SpecTbl (Mark, Name , Cnt, Unit) SELECT 0, MATNAME, Round(SUM(XUNIT*YUNIT)/1000000.0,2), 'кв.м' FROM ["+dbOut+"],["+dbPrice+_
            "] WHERE (UNITS = 2 OR MATTYPE = 99 OR MATTYPE = 48) AND PRICEID = COD AND ASSEMBLY = 0 GROUP BY MATNAME"   
   RSet1.Open SQLStr, ObjCn
   End If
'-- Выбираем   Комплектующие
   SQLStr="SELECT MATNAME FROM ["+dbOut+"],["+dbPrice+_
            "] WHERE (MATTYPE = 93 OR (MATTYPE = 134 AND PRICEID <> 388 AND PRICEID <> 665 AND PRICEID <> 666 AND PRICEID <> 667) OR MATTYPE = 136 OR MATTYPE = 143 OR MATTYPE = 190 OR MATTYPE = 192) AND UNITS<>11 AND PRICEID = COD AND ASSEMBLY = 0 GROUP BY MATNAME"   
   Set RSet1=RecordsetDB(ObjCn, SQLStr)
   Rows1 = RSet1.RecordCount
   If Rows1<>0 Then
   SQLStr="INSERT INTO SpecTbl VALUES (1,'Комплектующие',0,0)"
   RSet1.Close
   RSet1.Open SQLStr, ObjCn
   SQLStr="INSERT INTO SpecTbl (Mark, Name , Cnt, Unit) SELECT 0, MATNAME, SUM(COUNT), 'шт' FROM ["+dbOut+"],["+dbPrice+_
            "] WHERE (MATTYPE = 93 OR (MATTYPE = 134 AND PRICEID <> 388 AND PRICEID <> 665 AND PRICEID <> 666 AND PRICEID <> 667) OR MATTYPE = 136 OR MATTYPE = 143 OR MATTYPE = 190 OR MATTYPE = 192) AND UNITS<>11 AND PRICEID = COD AND ASSEMBLY = 0 GROUP BY MATNAME"   
   RSet1.Open SQLStr, ObjCn
   End If
'-- Выбираем   длиномеры
   SQLStr="SELECT LNGNAME FROM LBOutTbl GROUP BY LNGNAME"   
   Set RSet1=RecordsetDB(ObjCn, SQLStr)
   Rows1 = RSet1.RecordCount
   If Rows1<>0 Then
   SQLStr="INSERT INTO SpecTbl VALUES (1,'Длиномеры',0,0)"
   RSet1.Close
   RSet1.Open SQLStr, ObjCn
   SQLStr="INSERT INTO SpecTbl (Mark, Name , Cnt, Unit) SELECT 0, (Switch(LNGTYPE=0,'Столешница',LNGTYPE=4,"+_
               "'Карниз профильный',LNGTYPE=3,'Плинтус',LNGTYPE=5,'Цоколь',LNGTYPE=2,'Ф/П',LNGTYPE=6,'Св.панель',"+_
               "LNGTYPE=7,'Балюстрада')), SUM(XUNIT), 'м.п.' FROM LBOutTbl"+_
               " WHERE LNGTYPE <> 1 GROUP BY LNGTYPE"   
   RSet1.Open SQLStr, ObjCn
   End If

End Sub

'========================================================
'Создадим приложение Excel
'========================================================
'-- Функция создает объект "документ Excel"
'-- Входные данные:
'-- Name - имя листа
'-- Выходные параметры:
'-- функция возвращает значение - объект Excel

Function CreateExcel(Name)
   Set ObjExc = CreateObject("Excel.Application")
   If Not ObjExc Is Nothing Then
      ObjExc.Visible = True
      ObjExc.Workbooks.Add(1)
      With ObjExc.Sheets(1)
            .Select
            .Name = Name
            .PageSetup.RightMargin = objExc.CentimetersToPoints(0.6)
            .PageSetup.LeftMargin = objExc.CentimetersToPoints(1)
            .PageSetup.BottomMargin = objExc.CentimetersToPoints(0.6)
            .PageSetup.TopMargin = objExc.CentimetersToPoints(1.9)
            .PageSetup.CenterHorizontally = True
      End With
      Set CreateExcel=ObjExc
   Else
      Set CreateExcel=Nothing
   End If
End Function

'========================================================
' Заполним документ
'========================================================
Sub FillExcel(Doc)
  With Doc
      .Columns("A:A").ColumnWidth = 2.8
      .Columns("B:K").ColumnWidth = 8.43
      .Columns("D:D").ColumnWidth = 10.86
      .Columns("F:F").ColumnWidth = 4.71
      .Columns("J:J").ColumnWidth = 11.43
      .Sheets(1).PageSetup.RightHeader = "&""-,italic""&20МФ ""-----"""
   End With
   temp=Write("Заказчик:","A",1,Doc,1,0,14)
   temp=Write(client,"C",1,Doc,0,1,14)




End Sub
'========================================================
' Завершение работы
' Надо предложить сохранить документ
'========================================================
Function FinishForma()
Dim Name
   Name = Path&"\Hell.xls"   
   objCn.Close
   ObjExc.ActiveWorkBook.SaveAs(Name)
   ObjExc.Quit
   Set ObjExc = Nothing
End Function

'========================================================
' Вставка картинки в шаблон
'========================================================
Function InsertWmfPicture(szWMFPath, WScale)
Dim lWscale
Dim Aspect
Dim Shift
   'lWscale = WScale*2.0
   
   lWscale = Eval(WScale)*1.0
   'K3F.Display(lWscale)

   ' Привяжемся к верхнему левому углу
   rr="C7"
   objExc.ActiveSheet.Range(rr).Select
   Set r1 = objExc.Range("C7:I50")
   Set  a = ObjExc.ActiveSheet.Pictures.Insert(szWMFPath)
       a.ShapeRange.LockAspectRatio = 0'WScale
       a.ShapeRange.Height = r1.Height
       a.ShapeRange.Width  = r1.Width
       Aspect = r1.Height / r1.Width
       'a.ShapeRange.ScaleWidth 1.0, msoFalse, msoScaleFromTopLeft
       'K3F.Display(lWscale)
       'K3F.Display(Aspect)
       If  lWscale < Aspect Then
         a.ShapeRange.ScaleHeight (lWscale/Aspect), msoFalse, msoScaleFromTopLeft
         a.ShapeRange.ScaleHeight (0.9), msoFalse, msoScaleFromTopLeft
         a.ShapeRange.ScaleWidth  (0.9), msoFalse, msoScaleFromTopLeft
           'K3F.Display(Aspect)
           a.ShapeRange.IncrementLeft (r1.Width*(0.1)/2)
       Else
         Shift = (r1.Width-r1.Width*(Aspect/lWscale))/2
         a.ShapeRange.ScaleWidth (Aspect/lWscale), msoFalse, msoScaleFromTopLeft
           'K3F.Display(Shift)
           a.ShapeRange.IncrementLeft Shift
       End If
       
End Function

'------------------------------------------------------------------------------------------------

Function FsoIsFileExist(DstFile)
   Dim Res
   Set Fso = CreateObject("Scripting.FileSystemObject")
   Res = Fso.FileExists(DstFile)
   Set Fso = Nothing
   FsoIsFileExist = Res
End Function
'---------------------------------------------------------------------------------------
Sub FsoDeleteFile(DstFile)
   Set Fso = CreateObject("Scripting.FileSystemObject")
   Fso.DeleteFile(DstFile)
   Set Fso = Nothing
End Sub
'------------------------------------------------------------------------------------------------

'-- Функция возвращает набор записей из базы данных
'-- Входные параметры
'-- SQLStr - строка SQL
'-- ObjDB - объект - соединение с БД
'-- Выходные параметры:
'-- Функция возвращает значение - объект "набор записей"

Function RecordsetDB(ObjDB, SQLStr)
   Set objRs = CreateObject("ADODB.Recordset")
   objRs.CursorType = 1
   objRs.Open SQLStr, ObjDB
   Rows = objRs.RecordCount
   Set RecordsetDB=objRs   
   If Rows < 1  Then
      Exit Function
   End If
   objRs.MoveFirst
End Function
'--------------------------------------------------------------------------------------
'-- Функция выводит в текст
'-- Входные данные:
'-- text - Текст
'-- Row - номер строки для вывода
'-- Column - номер колонки для вывода первого элемента
'-- Object - объект Excel, в который вставляются данные
'-- FBold - логическая переменная, показывающая жирность шрифта
'-- FItalic - логическая переменная, показывающая курсивность шрифта
'-- FSize - размер шрифта
'-- Выходные данные:
'-- Функция возвращает номер записанной строки

Function Write(text, Row, Column, Doc, FBold, FItalic, FSize)
   Cell=Row&Column
      With Doc
         .Range(Cell).Value = text
         .Range(Cell).Font.Bold = FBold
         .Range(Cell).Font.Italic = FItalic
         .Range(Cell).Font.Size = FSize
     End With
  Write=Row
End Function

Входная функция DoForma принимает переменные. Дальше выполняются подфункии.
Когда идёт запуск функции FillExcel(ObjExc), в которой заполняется лист Экселя, то все переменные пропадают.
Почему так?
Почему-то после закрытия документа excel остаётся висеть сам процесс excel.
Ручей
 
Сообщения: 883
Зарегистрирован: 15 июл 2011 19:55

Re: Разговоры не по теме. Флуд

Сообщение Рыжий Пёс » 18 янв 2013 18:49

Ручей писал(а):Версия 6.4
В наборе скриптов часто встречается функция (или что-то другое) K3F.Display
Что это такое? Описание как функции нигде нет.

MsgBox
Ручей писал(а):Не подскажите по одной проблеме в скрипте?

Да там у тебя не скрипт, а одна большая проблема.
DoConnectBase(szPath),(szOutTbl),(szPrice)
должно быть так.
aaa=DoConnectBase(szPath,szOutTbl,szPrice)
и воще надо руки отрывать за такие программы. На программиста 5 лет в институте учат, а вы что, таджика наняли?
у тебя весь модуль на глобальных переменных, а client - параметр, он локальный.
И по поводу "висит процесс". Вот эти буковки не для красоты в программу вставлены.
objCn.Close
ObjExc.Quit
Set ObjExc = Nothing
Аватара пользователя
Рыжий Пёс
 
Сообщения: 360
Зарегистрирован: 06 фев 2010 00:11

Re: Разговоры не по теме. Флуд

Сообщение Ручей » 18 янв 2013 19:29

Рыжий Пёс писал(а):и воще надо руки отрывать за такие программы. На программиста 5 лет в институте учат, а вы что, таджика наняли?

Этот скрипт я взял из стандартного написанного программистами Геоса. Я только изменил его.
Вот только, почему этот же скрипт работает без проблем, если его записать в блокноте отдельно и запустить с расширением .vbs?
И процесс не остаётся висеть после закрытия окна и переменные не исчезают при переходе на функцию FillExcel(ObjExc).
Сделал тестовый код создания документа ексель
Код: Выделить всё
Sub test( )
   Set ObjExc = CreateObject("Excel.Application")
   If Not ObjExc Is Nothing Then
      ObjExc.Visible = True
      ObjExc.Workbooks.Add(1)
      With ObjExc.Sheets(1)
            .Select
            .Name = "Name"
            .PageSetup.RightMargin = objExc.CentimetersToPoints(0.6)
            .PageSetup.LeftMargin = objExc.CentimetersToPoints(1)
            .PageSetup.BottomMargin = objExc.CentimetersToPoints(0.6)
            .PageSetup.TopMargin = objExc.CentimetersToPoints(1.9)
            .PageSetup.CenterHorizontally = False
      End With
      Set CreateExcel=ObjExc
   Else
      Set CreateExcel=Nothing
   End If
End Sub

Запускаю из K3Talk. Создаётся документ. Закрываю его и ексель закрывается в процессах.
Если в самом начале добавить
Код: Выделить всё
Dim ObjExc         'Объект Excel

то после закрытия екселя остаётся висеть сам процесс екселя. Это касяк запуска из K3Talk или что-то не верно в самом коде и ошибка может возникнуть в любой момент?
_____________
Когда добавлял objCn.Close, то выдавало ошибку, что объект уже закрыт.
_____________
Дописал Set ObjExc = Nothing и после закрытия документа вручную, процесс екселя так же закрывается.
Благодарю за помощь!!!!
__
Добавил
Код: Выделить всё
Dim client
Dim mail

но это не решило проблему с переменными. При переходе на функцию FillExcel(ObjExc) все переменные пропадают.
Ручей
 
Сообщения: 883
Зарегистрирован: 15 июл 2011 19:55

Re: Разговоры не по теме. Флуд

Сообщение Рыжий Пёс » 18 янв 2013 21:31

Переменные, объявленные вне тела процедуры являются глобальными и существуют, пока существует процесс, запустивший сценарий, если этим процессом является К3talk, все объекты останутся активны, пока он не закрыт.
Все переменные (и объекты, которые им соответствуют) объявленные внутри процедуры, уничтожаются при выходе из процедуры.
Ручей писал(а):Когда добавлял objCn.Close, то выдавало ошибку, что объект уже закрыт.

Видимо, он закрыт где-то раньше.
Dim только объявляет переменную, а ей ещё надо присвоить значение.
Dim client - здесь client глобальная для всех процедур.
Sub DoForma(szWMFPath,szPath,szOutTbl,szPrice,client,mail) - здесь client локальная для DoForma
Sub FillExcel(Doc)
temp=Write(client,"C",1,Doc,0,1,14) ' client - глобальная, но не имеет значения
End Sub
Надо так:
Dim g_client
Sub DoForma(szWMFPath,szPath,szOutTbl,szPrice,client,mail)
g_client=client
...
Sub FillExcel(Doc)
temp=Write(g_client,"C",1,Doc,0,1,14)
End Sub
И вообще, не следует злоупотреблять глобальными переменными. Правильнее передавать значения как параметры функции.
В данном случае кучу одноразовых процедур и функций следовало объединить в одну.
Аватара пользователя
Рыжий Пёс
 
Сообщения: 360
Зарегистрирован: 06 фев 2010 00:11

Re: Разговоры не по теме. Флуд

Сообщение Ручей » 18 янв 2013 22:09

Правда, что функции одноразовые. Просто исходник не мой был. Убрал функции и слил в один код.
Ещё над чем бьюсь второй день по всему инету и не могу найти ответ.
Пытался залить ячейку екселя через Interior.ThemeColor. Если записать макрос в екселе, то этому объекту присваивается переменная с именем выбранного цвета. Такие имена в скрипте не работают, а числа, что показал VBA на эти переменные не даёт нужный цвет, да и цветов получается лишь от 0 до 10. Нигде не найду, как красить в нужный цвет.
Так же, с помощью .ColorIndex делал нижнюю границу ячейки, но опять же проблема с цветом. Одно и тоже число в обоих случаях дают разный цвет. Как мне написали у них разные палитры.
Ещё в екселе красил ячейку градиентом. В записанном макросе фигурировало св-во gradient, но скрипт на него ругался, как на неизвестный объект.
Как в скрипте это победить?
Ручей
 
Сообщения: 883
Зарегистрирован: 15 июл 2011 19:55

Re: Разговоры не по теме. Флуд

Сообщение Рыжий Пёс » 19 янв 2013 03:17

Ручей писал(а):Как в скрипте это победить?

можно запустить процедуру VBA из script. Вот здесь описано, как это сделать. Сам не пробовал, но ничего сложного нет. Только, наверное, проще будет не создавать файл Ексель, а открывать сохранённый заранее шаблон с модулем, в котором содержатся нужные процедуры, и потом сохранять его в нужной папке.
Аватара пользователя
Рыжий Пёс
 
Сообщения: 360
Зарегистрирован: 06 фев 2010 00:11

Re: Разговоры не по теме. Флуд

Сообщение Ручей » 19 янв 2013 18:03

Решил освоить работу с БД, что бы не тыкаться на угад пользуясь готовым кодом, а понимать шаги работы с БД.
Написал код создания объекта подключения к БД. Тут создаю таблицу.
Таблица создаётся, но выдаётся ошибка на команде rec.Close "Операция не допускается, если объект закрыт".
Как закрыт, если я не закрывал? Тогда rec.Close не нужен вовсе? И con.Close тоже?
Код: Выделить всё
path_dbf = "C:\test\"
' Процесс подсоединения к базам DBF
Set con = WScript.CreateObject("ADODB.Connection")   ' объект для коннекта к БД
Set rec = WScript.CreateObject("ADODB.Recordset")  'объект позволяет заносить в память таблицу данных
'подключение через OLE
con.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&path_dbf&";Extended Properties=DBASE IV;"
con.Open 'подключаемся к БД
SQLStr = "CREATE TABLE SpecTbl (Mark INTEGER, Name VARCHAR(50), Cnt INTEGER, Unit VARCHAR(6))"
rec.Open SQLStr, con
rec.Close
con.Close

Везде встречаю такой пример, как проверку на существование таблицы. Это необходимо, что бы не возникало ошибок при опросе таблицы, если её нет, и при создании, если она уже есть.
Например так
SQL = "CREATE TABLES IF NOT EXISTS имя...."
Но ругает на ошибку в синтаксисе. Выходит, что IF NOT EXISTS не применим в запросах MS SQL.
Как запросом проверить наличие таблицы?
Рою интернет и все примеры не дают результат.
Есть ещё вариант создавать не файл с таблицей, а временную в памяти. Везде описывается, что для этого к имени таблицы надо добавить символ #, но опять винда ругается ошибку синтаксиса.
Почему все примеры, что нахожу не работают? Где искать верную инфу в моём случаи?
Ручей
 
Сообщения: 883
Зарегистрирован: 15 июл 2011 19:55

Re: Разговоры не по теме. Флуд

Сообщение Рыжий Пёс » 19 янв 2013 23:00

Ручей писал(а):Решил освоить работу с БД

э-э-э... советую начать с азов.
язык sql имеет отличия для разных систем. их надо учитывать.
Ручей писал(а):CREATE TABLES IF NOT EXISTS
в аксесс не работает.
Ручей писал(а):SQLStr = "CREATE TABLE SpecTbl (Mark INTEGER, Name VARCHAR(50), Cnt INTEGER, Unit VARCHAR(6))"
rec.Open SQLStr, con

ты открываешь несуществующий набор записей, соответственно закрывать нечего.
и вообще, я уже советовал с такими вопросами обращаться на sql.ru
Аватара пользователя
Рыжий Пёс
 
Сообщения: 360
Зарегистрирован: 06 фев 2010 00:11

Re: Разговоры не по теме. Флуд

Сообщение Ручей » 12 фев 2013 19:56

Работая с производством мебели ежедневно сталкиваешься с бумажками, которые выдаёшь на производство.
Однажды, приведя кое-как, к определённому виду бумажки, работаешь с ними и всё равно ощущаешь недостаточность, несовершенство того документооборота, что есть. Сам раньше не работал на больших предприятиях в качестве конструтора. Даже не представляю, как вообще должна выглядеть "бумажкооборотность".
Вообщем, имея то, что есть сейчас, из-за человеческого фактора часто возникают ошибки. К примеру, отдашь доки на пр-во, потом что-то поменяешь, скажешь человеку исправить в фасадах что-то, но тот забудет и пр...
Сейчас делаю такие бумаги:
    спецификация на списание и комплектацию;
    деталировка на ДСП, ДВП, фасады...;
    титульный лист с рисунком и описанием;
    отдельный бланк на фасады;
    по необходимости лист оценки заказа для буха.

Получается так, что фасад у меня на деталировки, потом в бланке для фасадов, который я скидываю другому челоеку. Он из этого бланка копирует данные себе и раскидывает по материалам. Разные материалы идут, как разные заказы с отличными номерами. Например. эмаль с №5, шпон с №24, даже если один заказчик.
Было так, что исправил фасады в том бланке, что скинул человеку для пр-ва фасадов, предупредил, но тот забыл исправить.
____________
Вот и думаю, как построить эффективную систему "бумажкооборота". У меня мысли вообще создать единую базу выгрузки заказов. Тогда не будет дубликатов файлов excel. Изменив у себя, это отразится везде, но должна быть пометка о правке. Имея единую базу выгрузки, будет и на списании автоматом отражаться, и контролироваться кто и что делал.
Пока всё очень туманно представляю, может и не верно из-за отсутствия опыта.
Может кто поделится опытом, мыслями. Если у кого реализованно всё без excelя, может поделяться скринами, как всё выглядит.
______________
Если кто-то делал работу с заказами через аксес, а не с отчётами экселя, то какие, грубо говоря, должны быть и нужны окошки? Какая получилась оболочка?
Ручей
 
Сообщения: 883
Зарегистрирован: 15 июл 2011 19:55

Re: Разговоры не по теме. Флуд

Сообщение Ручей » 04 апр 2013 13:01

Есть формулы расчёта прогиба ДСП?
Ручей
 
Сообщения: 883
Зарегистрирован: 15 июл 2011 19:55

Пред.След.

Вернуться в К3-Мебель. Программа для производства и продажи мебели.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron