Help me,please!
24 отговора
706 прегледа
Help me,please!
имам таблица на ACCESS с две таблици.
table1 - field_ID,field11,field12
table2 - field_ID,field21,field22,filed23
Работя с table2,и искам да ползвам field11 от table1,което е текстовата ст-ст на номенклатурата във формата.
Като направя query и показвам него с ADO във формата, при изтриването на записа съответно ми изтрива и field_ID в table1.
Как да го запазя?
table1 - field_ID,field11,field12
table2 - field_ID,field21,field22,filed23
Работя с table2,и искам да ползвам field11 от table1,което е текстовата ст-ст на номенклатурата във формата.
Като направя query и показвам него с ADO във формата, при изтриването на записа съответно ми изтрива и field_ID в table1.
Как да го запазя?
Re: Help me,please!
Ако става дума за Access 2000, знам, че свързаните към данните форми
вътрешно използват обектния модел DAO. Но това е между другото.
Ако използвате Jet (т.е. таблиците са .mdb-файл), то проблемът най-вероятно
се дължи на релация между полета от таблицата с номенклатурите и таблицата
със записите, и която е с включен референциален интегритет с опция за
каскадно изтриване. В случай, когато в релация участва поле от таблица с
номенклатури, би трябвало да се изключи изцяло референциалния интегритет.
От менюто:
"Tools" -> "Relationships..."
Показва се схема на таблиците/заявките и релациите. Ако тя е празна, чрез
контекстното меню добавете в схемата двете таблици, които споменахте.
Със свързваща линия трябва да е показана релация. Натиснете десен бутон върху
нея и от контекстното меню изберете "Edit Relationship...". В показалия се
диалогов панел изключете опцията "Еnforce Referential Integrity" и натиснете "OK".
Смятам, че така проблемът ще се оправи. Ако не, дайте още информация относно
полетата на таблиците, релациите и заявките, които използвате.
Успех!
вътрешно използват обектния модел DAO. Но това е между другото.
Ако използвате Jet (т.е. таблиците са .mdb-файл), то проблемът най-вероятно
се дължи на релация между полета от таблицата с номенклатурите и таблицата
със записите, и която е с включен референциален интегритет с опция за
каскадно изтриване. В случай, когато в релация участва поле от таблица с
номенклатури, би трябвало да се изключи изцяло референциалния интегритет.
От менюто:
"Tools" -> "Relationships..."
Показва се схема на таблиците/заявките и релациите. Ако тя е празна, чрез
контекстното меню добавете в схемата двете таблици, които споменахте.
Със свързваща линия трябва да е показана релация. Натиснете десен бутон върху
нея и от контекстното меню изберете "Edit Relationship...". В показалия се
диалогов панел изключете опцията "Еnforce Referential Integrity" и натиснете "OK".
Смятам, че така проблемът ще се оправи. Ако не, дайте още информация относно
полетата на таблиците, релациите и заявките, които използвате.
Успех!
Re: Help me,please!
Тази релация ми трябваше, затова си направих нов АДО за другата таблица и във формата показах само интересуващия ме текст.
Така се получи.
обаче имам проблеми със кода на VB, че там все още нищо не знам
Така се получи.
обаче имам проблеми със кода на VB, че там все още нищо не знам
Re: Ако не е решен проблема, пиши пак
И аз благодаря.
Ако не си решил задачката, дай я в по-формализиран вид: какви са точно таблиците и какво смислово представят те, какви са полетата, кои полета са първични ключове, какви релации между таблиците искаш (обясни го по смисъл), какви заявки евентуално се опитваш да направиш, какви форми искаш да направиш, какво да визуализират и какво поведение да имат.
Още въпроси: На кой Access работиш? Какво разбираш под АДО?
За да напиша код на VB, би трябвало възпроизведа задачката при мен и да ти пусна обратно решението.
Успех!

Ако не си решил задачката, дай я в по-формализиран вид: какви са точно таблиците и какво смислово представят те, какви са полетата, кои полета са първични ключове, какви релации между таблиците искаш (обясни го по смисъл), какви заявки евентуално се опитваш да направиш, какви форми искаш да направиш, какво да визуализират и какво поведение да имат.
Още въпроси: На кой Access работиш? Какво разбираш под АДО?
За да напиша код на VB, би трябвало възпроизведа задачката при мен и да ти пусна обратно решението.
Успех!
Re: Ако не е решен проблема, пиши пак
MS Office 97
Този го реших, обаче имам май безброй за 24 часа. Например на .mdb -то сложих парола и сега не ми се отваря формата (VB6).
В пропъртите на Аdodc-controlite не ми дава да коригирам вече нищо.
Това го копнах от друго място, но не ми свършии работа.
Dim strConnect As String
Set Cnn = New ADODB.Connection
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Password=sezam;User ID=Admin;" & _
"Data Source=C:\DB1.mdb;" & _
"Persist Security Info=True;" & _
"Jet OLEDB:System database=C:\system.mdw"
With Cnn
.CursorLocation = adUseClient
.Open strConnect
End With
Set Rst = New ADODB.Recordset
Rst.ActiveConnection = Cnn
до сутринта със сигурност ще имам още .Може ли пак да питам?
Този го реших, обаче имам май безброй за 24 часа. Например на .mdb -то сложих парола и сега не ми се отваря формата (VB6).
В пропъртите на Аdodc-controlite не ми дава да коригирам вече нищо.
Това го копнах от друго място, но не ми свършии работа.
Dim strConnect As String
Set Cnn = New ADODB.Connection
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Password=sezam;User ID=Admin;" & _
"Data Source=C:\DB1.mdb;" & _
"Persist Security Info=True;" & _
"Jet OLEDB:System database=C:\system.mdw"
With Cnn
.CursorLocation = adUseClient
.Open strConnect
End With
Set Rst = New ADODB.Recordset
Rst.ActiveConnection = Cnn
до сутринта със сигурност ще имам още .Може ли пак да питам?
look this
За нещата,които питах досега се получаваше ефекта на
зададения въпрос, на който ти идва отговора в главата
още докато питаш.
Но ето едно нещо, на което се връщам постоянно и все не
се справям както трябва.
Когато филтрирам записи всичко си работи нормално,
но не успявам да му направя нова подредба на записите
в брояча - т.e. да не ми показва "Record 6/3",защото
във филтъра има 3 записа обаче това е 6-тия запис от
целия рекордсет.
Ето какво имам в кода.
Dim sBookMark As String
Dim recRecordset1 As Recordset, recRecordset2 As Recordset
Dim sFilterStr As String
If Adodc1.Recordset.RecordCount = 0 Then Exit Sub
следващото трябва да е оригиналния рекордсет
sBookMark = Adodc1.Recordset.Bookmark
Set recRecordset1 = Adodc1.Recordset 'save the recordset
sFilterStr = InputBox("критерий някакъв")
If Len(sFilterStr) = 0 Then Exit Sub
Adodc1.Recordset.Filter = sFilterStr
и тук трябва да се присвои на recRecordset2 новия набор,
пък и да могат да му се прередят записите, за да може ето
това:
Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
On Error Resume Next
lblStatus.Caption = Adodc1.Recordset.Bookmark & "/" & Adodc1.Recordset.RecordCount
End Sub
да ги показва вярно.
Освен това ако можеш да ми кажеш например къде мога да прочета
нещо компактно за multi-потребителски режим?
Май много стана....
зададения въпрос, на който ти идва отговора в главата
още докато питаш.
Но ето едно нещо, на което се връщам постоянно и все не
се справям както трябва.
Когато филтрирам записи всичко си работи нормално,
но не успявам да му направя нова подредба на записите
в брояча - т.e. да не ми показва "Record 6/3",защото
във филтъра има 3 записа обаче това е 6-тия запис от
целия рекордсет.
Ето какво имам в кода.
Dim sBookMark As String
Dim recRecordset1 As Recordset, recRecordset2 As Recordset
Dim sFilterStr As String
If Adodc1.Recordset.RecordCount = 0 Then Exit Sub
следващото трябва да е оригиналния рекордсет
sBookMark = Adodc1.Recordset.Bookmark
Set recRecordset1 = Adodc1.Recordset 'save the recordset
sFilterStr = InputBox("критерий някакъв")
If Len(sFilterStr) = 0 Then Exit Sub
Adodc1.Recordset.Filter = sFilterStr
и тук трябва да се присвои на recRecordset2 новия набор,
пък и да могат да му се прередят записите, за да може ето
това:
Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
On Error Resume Next
lblStatus.Caption = Adodc1.Recordset.Bookmark & "/" & Adodc1.Recordset.RecordCount
End Sub
да ги показва вярно.
Освен това ако можеш да ми кажеш например къде мога да прочета
нещо компактно за multi-потребителски режим?
Май много стана....
Засега умувам
Мислех, че разработваш на Access, доколкото разбрах, работиш върху VB 6.0 приложение с използване на .mdb весия Access 97. Тъй като съм деинсталирал Visual Studio 6.0, ще трябва да поумувам, за да разбера новите въпроси. Няма да е зле да имаш MSDN. Междувременно ти предлагам напосоки линкове, където има вероятност да намериш каквото ти трябва.
Access 2000 Developer's Handbook. Chapter 6: ActiveX Data Objects
[ulr] [линк] [/url]
ADO Provider Properties and Settings
[линк]
Advanced ADO for the VBA Programmer
[линк]
An Easy Way to Create OLE DB Connection Strings
[линк]
Everything You Need to Know About ADO Recordsets
[линк]
И още нещо: не задавай твърдо ConnectionString-говете в дата-контролите, инициализирай ги в събитието Form_Load.
Access 2000 Developer's Handbook. Chapter 6: ActiveX Data Objects
[ulr] [линк] [/url]
ADO Provider Properties and Settings
[линк]
Advanced ADO for the VBA Programmer
[линк]
An Easy Way to Create OLE DB Connection Strings
[линк]
Everything You Need to Know About ADO Recordsets
[линк]
И още нещо: не задавай твърдо ConnectionString-говете в дата-контролите, инициализирай ги в събитието Form_Load.
Re: Засега умувам
На АCCESS би ми било лесно. VB ме затруднява. Имам MSDN. Правилно си разбрал какво разработвам. Все забравям, че хората не знаят това, което ми е в главата.
Re: look this
Замени реда:
със следното:
Извинявай, че се забавих, ама настъпиха работните дни...
lblStatus.Caption = Adodc1.Recordset.Bookmark & "/" & Adodc1.Recordset.RecordCount
със следното:
lblStatus.Caption = Adodc1.Recordset.AbsolutePosition & "/" & Adodc1.Recordset.RecordCount
Извинявай, че се забавих, ама настъпиха работните дни...
Re: look this
всяко гениално нещо е просто.
Благодаря ти много.
Може ли да ти задавам още въпроси?
Благодаря ти много.
Може ли да ти задавам още въпроси?
Re: look this
И още не ми се отваря секюрнатото мдб.
Нещо не ми сработи латиницата.Извинявай!
Нещо не ми сработи латиницата.Извинявай!
Няма начин, ще отворим .MDB-то
Този е малко по-сложен въпрос, не заради конкретния проблем, а защото ако искаш да изпипаш добре връзката към базата, ще е нужна малка реорганизация на кода.
Но първо просто ще отворим базата с паролата, малко да помисля. Междувременно натрупай и другите въпроси.
Аз тествам нещата на VB.NET с конвертиран стар проект от VB 6.0, съдържащ ADO Data Controls. Горе-долу е същото.
Но първо просто ще отворим базата с паролата, малко да помисля. Междувременно натрупай и другите въпроси.
Аз тествам нещата на VB.NET с конвертиран стар проект от VB 6.0, съдържащ ADO Data Controls. Горе-долу е същото.
Отваряне на .MDB: Може ли да пробваш нещо?
Без да съм проучил, имам смътното усещане, че не е добре .mdb-файлът с паролата да е версия Access 97 (Jet 3.51).
Нищо не пречи да пробваш следното: архивирай .mdb-файла, вземи негово копие без парола, конвертирай го във формат за Access 2000 (Jet 4.0), след това на копие на получения файл сложи парола. Опитай да се включиш към получения файл без парола, след това и към получения файл с парола и да видим какво ще стане.
Обаче може да се появи проблем и от версията на System.mdw.
Ще се ползва ли конкурентно от няколко потребителя базата?
Нищо не пречи да пробваш следното: архивирай .mdb-файла, вземи негово копие без парола, конвертирай го във формат за Access 2000 (Jet 4.0), след това на копие на получения файл сложи парола. Опитай да се включиш към получения файл без парола, след това и към получения файл с парола и да видим какво ще стане.
Обаче може да се появи проблем и от версията на System.mdw.
Ще се ползва ли конкурентно от няколко потребителя базата?
Пиша оттук, че горе много се обърка
Брей, съвсем ги обърках постингите.
По въпроса за включване към базата данни с паролата:
Препоръчвам ти да тестваш връзката към базата данни, като си направиш .udl файл. Направи празен текстов файл, задай му разширение на името - .udl и щракни върху него. Ще се стартира Microsoft Data Link Editor, един прост диалогов панел, има и бутонче "Help". Избери в първия му екран "Microsoft Jet 4.0 OLE DB provider", в другите екрани е очевидно какво трябва да се въведе. Има и бутон за тестване на връзката. Като приключиш с редактирането, отвори файла (внимание, Unicode!) с Notepad. В него ще видиш готов ConnectionString. Копирай си го където трябва в проекта. Обаче по-нататък имай предвид, че компилираното приложение трябва да е конфигурируемо поне по отношение на пътя до базата данни. А и не трябва да се допуска възможността паролата да се вижда в .exe файла.
Има известно противоречие в това, което описваш в свободен текст и това, което задаваш в ConnectionString. Какво си направил: сложил си парола само на базата данни или използваш т. нар. user-level security (както личи от кода)?
User-level security на Access не е интегрирана със системата за сигурност на операционната система. Ще създаде много допълнителна работа по поддръжката на акаунти в системната база данни (която често обича да се изгубва). Администраторът ще бере ядове...
От чисто практически съображения, препоръчвам да сложиш само ПАРОЛА НА БАЗАТА ДАННИ. Ето за този случай какъв примерен .udl файл съм получил:
Разбира се, тази защита твърде елементарно се разбива. Изборът й зависи от това, доколко са компетентни потребителите. Ако ти трябва по-сериозна защита, или използвай user-level security (ама... виж по-горе), или използвай друг двигател за бази данни.
Поиграй си, пробвай. Успех!
P.S.: Пиши какво се получава.
По въпроса за включване към базата данни с паролата:
Препоръчвам ти да тестваш връзката към базата данни, като си направиш .udl файл. Направи празен текстов файл, задай му разширение на името - .udl и щракни върху него. Ще се стартира Microsoft Data Link Editor, един прост диалогов панел, има и бутонче "Help". Избери в първия му екран "Microsoft Jet 4.0 OLE DB provider", в другите екрани е очевидно какво трябва да се въведе. Има и бутон за тестване на връзката. Като приключиш с редактирането, отвори файла (внимание, Unicode!) с Notepad. В него ще видиш готов ConnectionString. Копирай си го където трябва в проекта. Обаче по-нататък имай предвид, че компилираното приложение трябва да е конфигурируемо поне по отношение на пътя до базата данни. А и не трябва да се допуска възможността паролата да се вижда в .exe файла.
Има известно противоречие в това, което описваш в свободен текст и това, което задаваш в ConnectionString. Какво си направил: сложил си парола само на базата данни или използваш т. нар. user-level security (както личи от кода)?
User-level security на Access не е интегрирана със системата за сигурност на операционната система. Ще създаде много допълнителна работа по поддръжката на акаунти в системната база данни (която често обича да се изгубва). Администраторът ще бере ядове...
От чисто практически съображения, препоръчвам да сложиш само ПАРОЛА НА БАЗАТА ДАННИ. Ето за този случай какъв примерен .udl файл съм получил:
[oledb]
; Everything after this line is an OLE DB initstring
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TestDatabase.mdb;Persist Security Info=False;Jet OLEDB:Database Password=password
Разбира се, тази защита твърде елементарно се разбива. Изборът й зависи от това, доколко са компетентни потребителите. Ако ти трябва по-сериозна защита, или използвай user-level security (ама... виж по-горе), или използвай друг двигател за бази данни.
Поиграй си, пробвай. Успех!
P.S.: Пиши какво се получава.
Re: Пиша оттук, че горе много се обърка
Цял ден поглеждам тук и понеже стоях до късно снощи мислех,че последното писано през нощта е от мен. Изобщо не помня кога го писах. И сега виждам, че ти си ми отговарял.
Няма да се изпсувам.
Няма да се изпсувам.
Re: Пиша оттук, че горе много се обърка
Получава се това, че ми се отваря формата , но контрола (ADODC1) ми е недостъпен и си изглежда hide-нат. Всъщност изобщо не мога да му присвоя RecordSource.
Re: Пиша оттук, че горе много се обърка
Реших си проблема със секуритатите. Само че през менютата.
ADODCProperties ->Property Pages ->Build->Data Link Properties ->All
Там сега указах и пътя до system.mdw. Преди да ми проговориш за него нямаше кой да се сети.
Поглеждай днес пак.
ADODCProperties ->Property Pages ->Build->Data Link Properties ->All
Там сега указах и пътя до system.mdw. Преди да ми проговориш за него нямаше кой да се сети.
Поглеждай днес пак.
Re: Пиша оттук, че горе много се обърка
Я да попиша още малко, че ми е дошла музата и след утре ще имам само да благодаря. няма да питамповече.
Парола сложих само на ACCESS-а. Обаче май ще се работи от повече от едно место. Доколкото знам с ACCESS-a това става по два начина - или се оставя обща таблица, а се размножават останалите query-та, macros-и и т.н. или се правят репликации.
При задача на VB върху аксеска база данни как се прави това?
Извинявай, обаче наистина ми е много напечено.
Парола сложих само на ACCESS-а. Обаче май ще се работи от повече от едно место. Доколкото знам с ACCESS-a това става по два начина - или се оставя обща таблица, а се размножават останалите query-та, macros-и и т.н. или се правят репликации.
При задача на VB върху аксеска база данни как се прави това?
Извинявай, обаче наистина ми е много напечено.
Многопотребителски сценарий
Относно многопотребителския сценарий:
Репликация? Не!!!
На съответните работни места се инсталира VB-приложението - изпълнимия файл, .dll, .ocx, както и евентуално конфигурационни файлове, написани от теб. Базата данни (.mdb) се поставя в споделена в мрежата папка с права на потребителите за четене, запис и изтриване (за съжаление трябва). Приложенията се конфигурират така, че по време на изпълнението в ConnectionStrings да се зарежда UNC-пътя към базата данни (.mdb). В базата данни може да има всичко, но от практиката ми е известно, че от VB-приложението може се ползват по същество таблиците и заявките (queries).
По-горе ти намекнах (не бяхме си дошли на думата), че не трябва твърдо да се програмират ConnectionStrings, те трябва да се конструират и присвояват по време на изпълнението, на базата на конфигурационна информация. Тя може да е в .ini-файл или в registry, както избереш. В случая, по-добре да е в registry, там можеш да скриеш и паролата на базата данни.
Така, ако се промени мрежовия път на базата данни, инсталираните приложения само ще се преконфигурират. В противен случай идваме до абсурда да се налага да компилираш наново и да преинсталираш приложенията.
Репликация? Не!!!
На съответните работни места се инсталира VB-приложението - изпълнимия файл, .dll, .ocx, както и евентуално конфигурационни файлове, написани от теб. Базата данни (.mdb) се поставя в споделена в мрежата папка с права на потребителите за четене, запис и изтриване (за съжаление трябва). Приложенията се конфигурират така, че по време на изпълнението в ConnectionStrings да се зарежда UNC-пътя към базата данни (.mdb). В базата данни може да има всичко, но от практиката ми е известно, че от VB-приложението може се ползват по същество таблиците и заявките (queries).
По-горе ти намекнах (не бяхме си дошли на думата), че не трябва твърдо да се програмират ConnectionStrings, те трябва да се конструират и присвояват по време на изпълнението, на базата на конфигурационна информация. Тя може да е в .ini-файл или в registry, както избереш. В случая, по-добре да е в registry, там можеш да скриеш и паролата на базата данни.
Така, ако се промени мрежовия път на базата данни, инсталираните приложения само ще се преконфигурират. В противен случай идваме до абсурда да се налага да компилираш наново и да преинсталираш приложенията.