:: Visual Foxpro, Foxpro for DOS
Re: копирование таблиц
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Владимир Максимов
Прежде, чем вообще что-то делать, надо ответить на простой вопрос: зачем? Какую задачу Вы хотите решить?
Если я правильно понял, то речь идет о том, что есть два независимых приложения, которые продали одному и тому же заказчику. И? Что даст наличие общего справочника в этих двух разных приложениях этому самому заказчику?

Не продавал я ничего никому, небольшая контора у нас, сами и пользуемся.

Какая задача - два приложения, обобщенно сходные по идеологии, но в одно несовместимые, есть товары, есть услуги, и есть специфика. Заказчики и пользователи общие. Раньше были раздельные таблицы пользователей и заказчиков. Если с пользователями еще как-то, их мало, то с Заказчиками беда. Например, он существует в одном справочнике, товаров, а обратился за услугой, заполняется в разное время, в одном месте ООО Слон, в другом Общество с ограниченной ...и т.п.,

Я объединил таблицы из двух приложений, убрал дубли, все привел в соответствие. Таблицу положил в отдельную папку, и она не входит ни в одно приложение. Видимо, сделал криво, иногда подвисает, похоже где-то некорректно закрывается, или не снимается блокировка после редактирования. Лечится путем выхода всех юзеров из всех приложений, потом нормально работает. Когда и по какой причине возникает глюк отловить не могу, просто предполагаю. Редактирование разрешено только из одного приложения.

Так же встретил много мнений, что такое использование таблиц не очень грамотное и правильное, вот отсюда возникла идея вернуть таблицы в дбс и как-то их синхронизировать.



Исправлено 1 раз(а). Последнее : DmitryKn, 03.11.22 12:19
Ratings: 0 negative/0 positive
Re: копирование таблиц
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Насколько я понимаю, оставить одну таблицу в одной базе и открывать ее из другой, это в принципе, тоже самое.
Ratings: 0 negative/0 positive
Re: копирование таблиц
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
DmitryKn
Какая задача - два приложения, обобщенно сходные по идеологии, но в одно несовместимые ...

Не возьмусь однозначно утверждать, но судя по процитированному - таки возможность совместимости далеко не нулевая )))

Я бы начал посмотреть в сторону создания единой БД для этих двух приложений, и (если время позволяет) подумал бы насчет перехода на более "взрослую" субд.
Ratings: 0 negative/0 positive
Re: копирование таблиц
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
возможность не нулевая, но, боюсь, не подниму столько.

А как это, одна БД для 2-х приложений?

более взрослая СУБД - MySQL ? мне же ее с 0 изучать, фокс вроде работает, китаец Чен осовременивает...



Исправлено 1 раз(а). Последнее : DmitryKn, 03.11.22 12:55
Ratings: 0 negative/0 positive
Re: копирование таблиц
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
1). А в чем принципиальная проблема одной БД для двух схожих приложений в которых даже нек справочники пересекаются ...

2). я же специально в кавычках про взрослую )))

Совершенно не обязательно мускуль, рассмотрите разные варианты, сейчас вот в моде постгресс например.
Заодно бонусом прокачаете свои скиллы - может весьма пригодиться потом

Просто у меня лично остались очень негативные воспоминания по использованию dbc в качестве БД, но возможно я не смог правильно "приготовить" эту кошку)))

Сам использую до сих пор достаточно простой субд-движок firebird, он опенсорс, ставится и на винду и на линух, х32-х64 на выбор, размер базы 40-60Гб вполне ненапряжно живет даже на обычном десктопе - для моих задач более чем. У кого задачи посерьезнее - соотв и выбирают что-то уже посерьезнее. При этом никуда не ушел с фокса - само приложение по-прежнему на нем родном (не знаю толком ничего другого)



Исправлено 1 раз(а). Последнее : AndyNigmatec, 03.11.22 13:02
Ratings: 0 negative/0 positive
Re: копирование таблиц
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
т.е. приложение - формы, процедуры и т.д. на фоксе , а таблицы firebird ?



Исправлено 1 раз(а). Последнее : DmitryKn, 03.11.22 13:59
Ratings: 0 negative/0 positive
Re: копирование таблиц
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
DmitryKn
т.е. приложение - формы, процедуры и т.д. на фоксе , а таблицы firebird ?

Да, только в БД не только таблицы, там и триггеры и ХП (хранимые процедуры) - в них можно часть логики запихать - здесь вопрос подхода, кто-то старается бОльшую часть логики именно в ХП держать, кто-то наоборот их практически не использует - здесь (на форуме) даже как-то небольшой холивар на эту тему был )))

[attachment 36433 .png]



Исправлено 1 раз(а). Последнее : AndyNigmatec, 03.11.22 14:23
Ratings: 0 negative/0 positive
Re: копирование таблиц
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
а как обращаться из фокса?
т.е. в родном - Dataenvironment.Opentables, и они открылись, свободные - use, а эти как фокс понимает и видит? как их в проект включить?
Ratings: 0 negative/0 positive
Re: копирование таблиц
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
Таки совершенно не требуется включать в фоксовый проект таблицы ... а открываются/изменяются они посредством ODBC-драйвера, т.е. обычный клиент-сервер.

Ну вот тупо для примера выдрал первый попавшийся кусок кода из Load формы:

...
this.oConnect=CREATEOBJECT("db_connect")
this.oConnect.cConnectionString=_screen.cConnectionString
this.oConnect.AllowUseDbaConnect=_screen.AllowUseDbaConnect
this.oConnect.nUseTransaction=0
this.oConnect.ShowError=1
...
** обновить cFeatures из БД ************************
IF this.oConnect.BaseIfConnect()>0
this.oCad = CREATEOBJECT("cursoradapter")
WITH this.oCad
.Alias = 'cFeatures'
.ConflictCheckType = 3
.MapBinary = .T.
.MapVarchar = .T.
.DataSourceType = 'ODBC'
.DataSource = this.oConnect.nConnect
.SelectCmd = lcScriptR
.CursorSchema = lcSchema
.UseCursorSchema = .T.
.Prepared = .T.
.FetchSize = -1
.NoData = .F.
ENDWITH
IF !this.oCad.CursorFill()
lcOk=0
AERROR(laInfo)
MESSAGEBOX("Can't create adapter oCad:" + CHR(13) + m.laInfo[2])
ENDIF
ELSE
lcOk=0
AERROR(laInfo)
MESSAGEBOX("Can't establish connection:" + CHR(13) + m.laInfo[2])
ENDIF
this.oConnect.BaseIdleDisconnect()
...

или например запуск хранимой процедуры:

&& запрашиваем данные **************************
IF this.oConnect.BaseIfConnect()>0
cScript=[select nvalue from const where code=1014]
IF SQLEXEC(this.oConnect.nConnect,cScript,'c0')>0
this.nTypeRating=NVL(c0.nvalue,0)
ELSE
lcOk=0
AERROR(a1)
lcError=a1[2]
ENDIF
USE IN SELECT('c0')
cScript=[select code as code, code_kag, name, producer, pr_sale_amount, sale_report, sale_sum_report, ]+;
[ client_amount_report, tn_report, pr_tn, price_ss, price_min, free, msk, ]+;
[ skldays, saledays, sale_amount, client_amount, sale_sum, tn, din, tz, stock_sum, rate_proc, ]+;
[ amount_conc, free_conc, price_conc1, price_conc2 ]+;
[ from REPORT_QUICKLY_RISE(?this.dDate1,?this.nMinProc,?this.nMinSale,?this.nMinStock,?this.nMinClient,]+;
[?this.market_sid,?this.nDatePeriod,?this.nTypeRating)]+;
[ order by pr_tn desc]
IF !SQLEXEC(this.oConnect.nConnect,cScript,'cReport')>0
lcOk=0
AERROR(a1)
lcError=a1[2]
ENDIF
ELSE
lcOk=0
AERROR(laInfo)
MESSAGEBOX("Can't establish connection:" + CHR(13) + m.laInfo[2])
ENDIF
this.oConnect.BaseDisconnect()



Исправлено 1 раз(а). Последнее : AndyNigmatec, 03.11.22 14:40
Ratings: 0 negative/0 positive
Re: копирование таблиц
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
вникать и вникать, и прогноз не очень благоприятный..

но в чем принципиальное отличие или преимущество такого подхода? Если убрать осадок от однажды полетевшей из-за электроэнергии дбс ?



Исправлено 1 раз(а). Последнее : DmitryKn, 03.11.22 15:49
Ratings: 0 negative/0 positive
Re: копирование таблиц
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
Цитата:
но в чем принципиальное отличие или преимущество такого подхода? Если убрать осадок от однажды полетевшей из-за электроэнергии дбс ?

Если бы однажды ... такое было не раз, и один раз очень жестко.

Принципиальное - это переход на технологию клиент-сервер, контейнер БД (dbc) - собственно полноценным сервером не является.

Т.е. здесь часть "работы" переложена с клиента (приложения) на сервер и какая эта часть - зависит от проектировщика (от вас).

Сломать/сломаться может всё, но на своей практике после такого перехода я забыл про эту проблему. А бонусом получил нормально работающие триггеры и процедуры в БД, а также забыл про ограничения на размер таблиц (к примеру в самой "ходовой" табле у меня сейчас порядка 200 млн записей) - а это уже позволило сильно упростить и ускорить многую отчетность (и сами данные в наличии за большой срок и не нужно к примеру при "сложных" запросах дергать данные на клиента - вся обработка/расчет производятся в пределах самой БД).

Ну и удобно чисто на практике (для меня) оказалось что физически на диске БД - это один файл, все операции по ее администрированию оказалось легко "заскриптовать", и сама оболочка для работы с БД тоже весьма дружественна.

Да, еще же варианты разграничения доступа/прав на табл/процедуры уже заложены в сам движок БД - пользоваться ими или нет - это ваш выбор, но определенный удобства это предполагает.

Ну и главное - я же самоучка а не профессионал, а тут получил инструмент с достаточно низким порогом вхождения - т.е. достаточно оказалось моих скромных познаний и интернета.

Еще один момент положительный был - понадобилось тогда часть инфы в браузере чтоб выводилась - и здесь все решилось легко и непринужденно без особых "приседаний" - тупо использовал встроенные в php механизмы ... вспомнилось вот)))



Исправлено 5 раз(а). Последнее : AndyNigmatec, 03.11.22 16:57
Ratings: 0 negative/0 positive
Re: копирование таблиц
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
спасибо за познавательную инфу, но это скорее стратегическое решение, это не на "прямо сейчас", это все переделать придется.
Я ведь совсем не профессионал, и даже этот низкий порог вхождения кажется мне высоковатым. К примеру, в приведенном куске кода есть курсорадаптер, а я их не понимаю, хоть убей. Читал Клепинина, читал... так и кинул, не разобравшись.
Но подумать есть над чем.



Исправлено 1 раз(а). Последнее : DmitryKn, 03.11.22 18:12
Ratings: 0 negative/0 positive
Re: копирование таблиц
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
курсорадаптер не обязателен для предложенного - просто такой кусок кода попался, а так у меня сначала без всяких адаптеров было - SQLCONNECT, SQLEXEC ...

Я конечно не знаю как там у вас приложение организовано ... но на самом деле переделывать не так много как кажется, особенно если не практикуете изменение данных непосредственно в гриде.



Исправлено 2 раз(а). Последнее : AndyNigmatec, 03.11.22 18:18
Ratings: 0 negative/0 positive
Re: копирование таблиц
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Тогда спрошу у сообщества так:
мои свободные таблицы лежат отдельно в папке, не включены ни в один проект, в том числе в качестве freetables в dbc, при необходимости открываю use путь\tbl in 0
при корректировке использую rlock()
Это все в рамках допустимого?
Ratings: 0 negative/0 positive
Re: копирование таблиц
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
AndyNigmatec
... особенно если не практикуете изменение данных непосредственно в гриде.
очень даже практикую (
Ratings: 0 negative/0 positive
Re: копирование таблиц
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
DmitryKn
Это все в рамках допустимого?

я не вижу никакого криминала, а по использованию блокировки - ну это вам по логике действий виднее нужна она там или нет.

Кстати, привили мне здесь, стало как привычка:

lcMyFreeTable='ваш путь\tbl'
use (lcMyFreeTable) in 0 SHARED ALIAS cMyAlias

и не зависит от установки set excl )))))
и вы точно знаете с каким алиасом открыта табла



Исправлено 4 раз(а). Последнее : AndyNigmatec, 03.11.22 18:48
Ratings: 0 negative/1 positive
Re: копирование таблиц
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Отлично, спасибо!
Ratings: 0 negative/0 positive
Re: копирование таблиц
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
AndyNigmatec
lcMyFreeTable='ваш путь\tbl'
use (lcMyFreeTable) in 0 SHARED ALIAS cMyAlias

...
и вы точно знаете с каким алиасом открыта табла

Если свободная таблица freetbl источник local view и открыта с алиасом Mytbl, то надо view перестроить, и если да, то как?
Ratings: 0 negative/0 positive
Re: копирование таблиц
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
Честно говоря вьюшки практически не использовал - не было необходимости, но по логике - пропишите алиас таким же с каким табла автоматом при use открывалась - и думаю ничего менять не нужно будет.
Ratings: 0 negative/0 positive
Re: копирование таблиц
lemenev

Сообщений: 113
Дата регистрации: 23.06.2022
DmitryKn
Тогда спрошу у сообщества так:
мои свободные таблицы лежат отдельно в папке, не включены ни в один проект, в том числе в качестве freetables в dbc, при необходимости открываю use путь\tbl in 0
при корректировке использую rlock()
Это все в рамках допустимого?
Всё то, что вам советовали до меня – это всё правильная, но высокая теория. Попробую приземлить к вашему конкретному случаю.
У вас есть пользователи и заказчики. Оставьте в таблицах о них только неизменную информацию: название/фамилия, адрес, телефон, расчётный счёт и т.д. Уберите всё, что касается бизнес приложений (если таковое есть): сумма платежей, сумма зарезервированного товара и т.д. Таким образом, у вас эти таблицы будут иногда пополняться, крайне редко редактироваться, а в основном будут использоваться только для чтения.
Проблема при создании многопользовательских приложений – как «разрулить» ситуацию, когда двое хотят править одну и ту же запись. Но у вас вероятность такого события минимальна.
Тогда вам не нужна никакая «взрослая» СУБД. В рамках обычного Fox создайте свободные таблицы, не включайте их ни в какие базы, открывайте их со свойством SHARED, не используйте блокировки и будет вам счастье.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 26 (Гостей: 26)

© 2000-2024 Fox Club 
Яндекс.Метрика