Делаю на c++ в RAD StudioНечто подобное уже спрашивал в с++ треде,но меня послали к тем,кто работает в радке,спрошу такСразу оговорюсь,что я студент пту колледжа,задание по практике,если нужно-могу скинуть фулл ТЗ,ибо вполне вероятно,что сформулирую вопросы я сейчас коряво.К сути:1)Нужно сделать вход с логином-паролем.Регистрацию сделал,вопрос с входом.Есть БД Access с полями "Логин","Пароль" и "isadmin"Пытаюсь сделать так: if(Form3->DataSource1->DataSet->Locate("Логин",Edit1->Text,TLocateOptions())==true) { if(Form3->DataSource1->DataSet->Locate("Пароль",Edit2->Text,TLocateOptions())==true) { Form2->Show(); } }Очевидно,не работает.Алсо,это второй вариант,до этого пытался сделать через FieldByNameКроме того,пока нет идей,как сделать проверку значения isadmin(0/1) в определённом поле2) treeview.Он должен отражать штатное расписание предприятия.Его нужно построить из 2 sql таблиц(пикрил)В podrtype-"корневые" отделы,в otdtype-подотделы.И там,и там есть айдишник,который у подотделов по заверению местных программистов у подотделов соответствует id корневых.На ks и ko можно не обращать внимание,использовались для переезда с бд 30летней давностиОсновные непонятки у меня тут фактически со всем.TreeView нам не давали от слова "совсем",в интернете смог найти только общие сведения.Спасибо всем,кто дочитал эту простыню ,буду благодарен за любую помощь.
Ну же анончик объявись, помочь хочу. Dataset какой ADO? Через locate вариант не очень. Лучше сделай запрос (select ид from table where login= 'логин' and password = 'пароль'; (если query поддерживает параметры то лучше через них, чтобы избежать sql injection) ) через query и если query не будет пуст значит можно логиниться.если все таки решил через локейт не забудь проверить сместился ли курсор. значение поля можно получить через dataset.fieldbyname('название поля').value; хорошо бы сперва проверить есть ли такое поле через findfield('название поля') если вернет null значит поля нет.
>>1536102О, извини,я тутЯ пытался сделать с query,но то ли я тупой,то ли он с access действительно не дружит.Сейчас оно висит на ADOTableПредыдущий вариант выглядел так:while (!DataSource1->DataSet->Eof){if(Form3->Edit1->Text==DataSource1->DataSet->FieldByName("Логін")->AsString){ if(Form3->Edit2->Text==DataSource1->DataSet->FieldByName("Пароль")->AsString) { if(DataSource1->DataSet->FieldByName("isadmin")->AsInteger==1) { Form2->Show(); } else if(DataSource1->DataSet->FieldByName("isadmin")->AsInteger==0) { Form4->Show(); } }} }Datasource свойства нет,о livebinding не слышал,сейчас загуглю
>>1536122Так, начну тогда с конца Нашёл датасет,он не переходит в "active" без command textТуда сразу и писать запросы?
>>1536139Наверно слегка запутал тебя словом датасет. ADOquery, ADOTABLE, ADODATASET это все наследники класса TDataset. В датасорсе ты и указываешь датасет.
не забудь поля создать. если будет жаловаться при создании полей что неверные параметры. заполни у них значения по умолчанию
>>1536199DBGrid ведь принципиально важна,так?Она у меня ничего не отображает.При вводе данных выдаёт access violation
>>1536235дбгрид я для себя добавил чтобы смотреть что там в таблице.запускай точку останова и смотри на каком моменте ошибка возникает. Скорее всего обращаешься к не созданому объекту
>>1536261Я там поковырял, походу,починилНо теперь оно ругается на if(ADOQuery1isadmin->AsInteger==1)(Уже неплохо, раньше оно туда даже не заходило)Мне непонятно,как перевести её на плюсы Там нигде никакой символ не потерян?
>>1536271смотри вот откуда это имя берется. когда ты два раза на квери щелкаешь появляется список созданных полей. выбираешь его и вот нужное имя
>>1536274Понял, спасибоТеперь +- работает,хотя и считает isadmin=0,не смотря на значение в бдНе буду тебя уже сегодня мучить, огромное спасибоЗавтра,если что,поможешь чутка?
>>1536274Кста,ты в какой стране?Я просто действительно очень благодарен,думал,может хоть на пепси/пивчанский скинуть
>>1536289да я из рашки, завтра вечером тогда с Treeview помогу:) >может хоть на пепси/пивчанский скинутьНе переживай, лучше сам выпей:)
>>1536387Там всё равно этим будут пользоваться только внутри предприятия токари да офисные служащие.Оснлвная цель-чтобы начальник мог оперативнее дать по шапке пинающему хуи работнику
>>1536586селект ид фром тэйбл тэ вхере тэ.логин=логин энд хеш_пассворд=хеш(КОНКАТ(пассворд, тэ.соль))
>>15366811) Получаем юзверя по логину. Если он есть, то забираем у него хеш и соль. Если нет, сваливаемся с ошибкой об отсутствии юзверя.2) Генерим хеш из пароля и соли. Если сгенеренный хеш совпадает с полученным из бд, то пароль был верный.
>>1536489>ё равно этим будут пользоваться только внутри предприятия токари да офисные служащие.Оснлвная цель-чтобы начальник мог оперативнее дать по шапке пи>Секурити уровня б >МикроменеджментВспомнились истории знакомой когда она прогромистом н заводе работала, профили для МП окон програмировала.Так такой пиздец.Непосредственное начальсво сваливает свои косяки на рабочих, и прочие прелести.
>>1537629Тогда надо прикрутить дату изменения инфы хотя быХэши за <недели всё равно не сделаю,а так хоть подтасовки не будет
>>1537683Записала указы начальства на диктофон и когда оно стало пиздеть директору проиграла запись.Но работать в такой атмосфере в любом случае пиздец.Компетентному человеку нечего делать в таких местах.
>>1537708Я думал сделать выборку по первой таблице (там где корневые отделы),а потом по нажатию-по второй,где подотделы
>>1537786чтот скрин не приложился. Ну да есть косяк что корень должен быть первым в выборке, так что хорошо бы order by сделать, и чутка подправить алгоритм. Если для тя это большой косяк то могу подправить.
>>1537796Я пока всё равно без искричества сижу,видимо,уже завтра придётсяПервым в выборке-тип по списку в бд?