Гамбас Линук пројекат

Гамбас је развојно окружење које се дистрибуира под ГНУ ГПЛ лиценцомОвим можемо рећи да то није само програмски језик изведен из основног језика, већ је и врло користан алат при изградњи визуелних апликација за скоро сваку дистрибуцију ГНУ / Линука.

У Гамбасу, програмер има могућност графичког дизајнирања прозора, повлачењем објеката из оквира са алаткама, а затим писањем основног кода за сваки објекат.

Као што смо видели раније, Гамбас је заснован на основном тумачу са екстензијама објеката, слично Висуал Басицу. Али предност коју имамо са Гамбасом је та што можете брзо дизајнирати своју графичку апликацију са КТ или ГТК +, приступити МиСКЛ, ПостгреСКЛ, Фиребирд, ОДБЦ и СКЛите базама података, управљати апликацијама помоћу ДБУС -а, изградити Фронт Енд Линук команде, радити 3Д ОпенГЛ апликације , правити ЦГИ веб апликације, генерисати инсталационе пакете за различите дистрибуције, између осталог.

Из тог разлога можемо тада рећи да у Гамбасу није копија или клон Висуал Басица, јер је упркос томе што је базиран на бази, алтернатива за креирање програма и апликација за ГНУ окружења. Ако погледамо историју козица, открићемо да је прву верзију козица 1999. године објавио Француз Беноит Минисини, стварајући окружење које би нам омогућило лако програмирање и развој апликација са графичким корисничким интерфејсом.

У почетку је програмски облик у Гамбасу био сличан оном у Гимпу, са неколико прозора и оријентисан на употребу Кт и КДЕ. Када је 2008. прешао на верзије 2.к, укључивао је потпуно редизајнирање графичког програмског интерфејса, интегришући све у једном прозору и дозвољавајући употребу ГТК +. У 2011. је скочио на верзију 3.к.

Почнимо са Гамбас3 инсталација.

1. Како инсталирати Гамбас3


Једноставност Гамбаса олакшава употребу, па није потребно познавати било који програмски језик. Само требате имати бесплатан приручник и провести неко вријеме на њему. Из тог разлога, савршен је за учење ако тек почињете. Па, научимо како да га инсталирамо на наш Линук оперативни систем:

Прво морамо отворити командни терминал и унети ове команде једну по једну:

 судо адд-апт-репоситори ппа: гамбас-теам / гамбас-даили судо апт-гет упдате судо апт-гет инсталл гамбас3 
Команде за инсталацију Гамбаса

Помоћу ове командне линије можемо добити најновију објављену верзију Гамбаса. Тренутно иду на 3.8.1, иако препоручујем да имамо најстабилнију верзију коју можемо добити помоћу ових других наредби, али морамо имати на уму да никада не можемо додати два ППА -а истовремено, можемо имати само један од ова два, то је зато што бисмо могли узроковати грешку и морали бисмо почети с чишћењем претходних инсталација.

2. Направите Гамбас пројекат са базом података и пријавите га


Прво што морамо да урадимо је да дизајнирамо базу података која нам је потребна за чување наших података. Она коју ја предлажем ће се звати "студенти" и имаће два стола (студенте и предмете).
 Табела ученика: лична карта, лична карта, имена, презимена, адреса, телефон и е -пошта. Табела тема: ид, субјецт_наме 
Да бисмо то урадили, користимо веома једноставан менаџер за дизајн базе података, тзв СКЛите претраживач података, отворимо га и креирамо базу података кликом на ново дугме. Лоцирамо где ћемо га сачувати и креирамо табеле према претходном дизајну.

Једном направљен, изгледао би овако:

Поље ИД оставићемо као примарни кључ у обе табеле. Пре затварања мини-менаџера, додајемо му неке податке да бисмо проверили његово функционисање приликом дизајнирања образаца у програму. Сада, ако можемо притиснути дугме за спремање и затворити мини менаџер претраживача података.

3. Извођење програма Гамбас


Отварамо Гамбас и стварамо нови пројекат који му даје име и одговарајућу путању:

ЕНЛАРГЕ

Ради веће погодности, базу података креирану у фасциклу направљену за пројекат, у овом случају у фасциклу под називом ГестионЕстудиантес, биће лако приликом лоцирања њене путање у програму.

 „Конфигуришемо дугме за излаз. Јавни под бтнЦеррар_Цлицк () Напусти крај 
Направили смо два нова обрасца, за упис ученика и за предмете.

Сада конфигуришемо дугме за унос ученика:

 Публиц Суб бтнНуевоЕстудианте_Цлицк () ФМаин.Хиде ФормЕстудиантес.Схов Енд 
Такође конфигуришемо дугме за додавање теме:
 Публиц Суб бтнНуеваАсигнатура_Цлицк () ФМаин.Хиде ФормЦоурсес.Схов Енд 
Дакле, ми ћемо га доделити.

4. Дизајн обрасца за упис ученика


За почетак, ставили смо а цолумнвиев и два дугмета на која ћемо ставити нови текст и изаћи (Својство текста).

Можемо, ако желимо, сваком дугмету додати икону кроз својство слике. До цолумнвиев назваћемо то једноставно "сто" (У име имовине) веома је сличан било којој табели и покушавамо да овај први пројекат базе података учинимо што једноставнијим.

Позваћемо дугмад: бтннев И Изаћи.

Образац би изгледао овако:

Конфигуришемо дугме за затварање обрасца.

 Публиц Суб бтнЕкит_Цлицк () Ме.Затвори крај 
Сада прелазимо на кодирање.

5. Почели смо кодирати Гамбас


Почећемо да стављамо неки код у наш програм и ми ћемо га коментарисати. Прва ствар у бази података је веза са њом. За то нам Гамбас пружа Објекат везе.

Све што се појави са једним апострофом у коду је коментар који програм неће тумачити.

Пример:

 Варијабла 'Пројецт Тест Привате хцонн Ас Цоннецтион' за успостављање везе Приватна функција ЦоннецтБасе () Као Боолеан 'променљива за везу, враћа истиниту или лажну вредност. Ако хцонн Нулл Онда Ретурн Фалсе' проверавамо да веза није отворена хцонн = Нев Веза 'Покрећемо везу новом методом, а затим јој прослеђујемо параметре са параметром хцонн' за путању базе података хцонн.Хост = " / хоме / тест" хцонн.Наме = "студенти" 'име базе података хцонн.Типе = " склите3 "'тип базе података Покушајте хцонн.Опен ()' покушавамо да отворимо везу ако не успемо, шаљемо поруку о грешци и дајемо јој вредност нулл Ако грешка Затим хцонн = Нулл Мессаге.Еррор (" Није успело повезивање са база података ") Ретурн Труе Ендиф Ретурн Фалсе Енд 
Након што сте копирали горњи код, кликните на опцију Покрени из менија Отклањање грешака. Ако све прође у реду, не би требало да се појави грешка и екран нашег пројекта ће се поново појавити. Што значи да је веза са нашом базом података успостављена на задовољавајући начин.

У случају грешке, могући су узроци:

Узроци грешкеПогледајмо врсте узрока:

1. Приликом копирања и лепљења кода морате узети у обзир наводнике, који се често мењају приликом копирања и лепљења, па их апликација не препознаје. У овом случају, препоручљиво је избрисати наводнике и поставити их ручно. Код унутар наводника мора бити у фуксији да би се знало да је тачан.

2. Друга могућа грешка је што нисте означили одговарајуће опције на картици Својства пројекта, што можете пронаћи кликом на мени Пројекат, затим Својства и тамо на картици Компоненте проверите да ли су означене следеће опције:

  • бг
  • гб.дб
  • гб.дб.склите3
  • гб.форм
  • гб.дб.мискл (Ово не би требало бити потребно за базу података коју правимо, али је свеједно означавамо)

3. Још једна врло честа грешка је путања на којој имамо и пројекат и базу података, где се истакнуте линије налазе у коду за копирање и лепљење.

Након исправљања могућих грешака и провјере да ли наша апликација ради, настављамо затварање везе постављањем сљедећег кода на крај.

 ПУБЛИЦ СУБ цлосе цоннецтион () ИФ хцонн = НУЛЛ ТХЕН РЕТУРН хцонн.Цлосе () хцонн = НУЛЛ ЕНД 
Прво видимо да више није затворен, ако не, затварамо га .Близу

6. Прегледајте сачуване податке


Отварамо образац и унутар Процес формирања и ставили смо следећи код:

(Не заборавите да проверите наводнике који су код лепљења могли бити промењени).

 Јавни подобразац Форма_Опен () 'прво декларишемо променљиве и обришемо приказ колоне Дим хресул као резултат Дим кључ Тастер као Стринг Дим филтер Као табелу низова Обриши Ако ЦоннецтБасе () Затим врати' потврђујемо везу са базом података 'дефинишемо својства за приказ колоне 'цоунт фор нумбер оф цолумнс' текст за наслов колона 'видтх за ширину поравнања колона за поравнање поља. табле.Цолумнс.Цоунт = 6 табле.Цолумнс [0] .Тект = "Цедула" табле.Цолумнс [0] .Алигнмент = Алигн.Центер табле.Цолумнс [0] .Видтх = 100 табле.Цолумнс [1] .Тект = Табела "Имена". Колоне [1] .Алигнмент = Поравнај.Центер табелу. Колоне [1]. Ширину = 120 табела. Колоне [2] .Тект = "Презиме" табелу. Колоне [2] .Алигнмент = Алигн.Центер табелу. .Колоне [2]. Ширина = 120 табела.Колоне [3] .Тект = Табела „Адреса“. Колоне [3]. Поравнање = Поравнај.Центер табелу. Колоне [3]. Ширина = 120 табела. Колоне [4]. Тект = "Пхоне" табле.Цолумнс [4] .Алигнмент = Алигн.Центер табле.Цолумнс [4] .Видтх = 120 табле.Цолумнс [5] .Тект = "Маил" табле.Цолумнс [5] .Алигнмент = Алигн. Центрирај табелу. Ступци [5]. Ширина = 120 хресул = хцонн.Екец ("одабери * од ученика") 'Ово упутство претражује базу података, ако пронађе податке, чини променљиву хресул тачном и стога доступном (Доступно) Учините Док хресул .Аваилабле 'тада ће проћи кроз табелу са до вхиле петљом заснованом на кључу (Цедула) и попуниће табелу подацима. кеи = хресул ["ИД"] 'поље ИД чинимо примарним за претрагу табеле. Додајмо (лозинку, лозинку)' додајемо податке који се налазе у бази података. табела [кључ] [1] = хресул ["имена"] табела [кључ] [2] = хресул ["презиме"] табела [кључ] [3] = хресул ["адреса"] табела [кључ] [4] = хресул ["телефон"] табела [кључ] [5] = хресул ["пошта"] хресул.МовеНект () 'ово упутство унапређује претрагу до следећег податка Петља' Поново извршава упутства унутар петље све док више не постоје податке за приказ. ЦлосеЦоннецтион () 'затвара везу Крај 
Процес формирања

На крају га покрећемо и проверавамо његов рад, што ће вратити следећи резултат:

ЕНЛАРГЕ

7. Креирајте образац за унос података ученика


Сада ћемо створити нови образац који нам омогућава унос података за нове студенте, а предложени назив за то су едата.

Имаће следеће објекте: 6 ознака налепница, 6 оквира за текст и два дугмета.

Предложени распоред је следећи:

Да бисмо видели да ли све иде добро, идемо на образац који приказује списак ученика и конфигуришемо ново дугме на следећи начин:

ЕНЛАРГЕ

Ако нема грешака и све иде добро, идемо даље са конфигурисањем новонасталог обрасца за унос нових података ученика. Овај образац ће примити референцу на објекат типа веза, у нашем случају хцонн стога га стављамо на почетак нашег облика.

 'Датотека класе Гамбас' прво конфигуришемо везу Привате хцонн Ас Цоннецтион 'креирамо руннев метод који ће бити позван из обрасца који наводи студенте Публиц Суб руннев (дата Ас Цоннецтион) хцонн = дата' референцу за претходни образац Ме. СховМодал () 'приморава да ступи у интеракцију са обрасцем пре него што га затворите Крај. Конфигуришемо дугме за отказивање: Јавни под бтнЦанцелар_Цлицк () Ме.Затвори (0) Крај За унос нових података користићемо следеће упутство: ТРИ хцонн.ЕКСЕЦ („ уметни у моје табеле вредности (& 1, & 2, & 3, & 4, & 5. & 6) ”, тктид, тктнаме, ткластнаме, тктпхоне, тктмобиле, тктцумпле) екец Поља ће бити позвана знаком & одговарајући индекс као што је приказано испод. (& 1, & 2, & 3, & 4, & 5. & 6) 
Вратимо се на претходни образац и конфигуришемо дугме за прихватање на следећи начин:

ЕНЛАРГЕ

Прво покушавамо да се повежемо са нашом базом података, ако не успемо, одлазимо. Када је веза успостављена, позвали смо рунневде фдата метход. Како је овај образац приказан у модалном облику, овај код чека да унесемо податке у фдата или га једноставно затворимо.

Затим затвара везу и позива метод форм_опен који поново учитава податке како би приказао извршене промене. Сада ћемо видети како да променимо запис, на пример ако пријатељ промени мобилни телефон, само уредите то поље.

Искористићемо догађај активирања наше контроле цолунмвиев (табела) да бисте додали ову функционалност. Овај догађај се покреће двоструким кликом на било коју колону у табели.

 Публиц Суб табле_Ацтивате () Дим хресул Као резултат Иф табле.Цуррент = Нулл Онда Ретурн Иф ЦоннецтБасе () Тхен Ретурн хресул = хцонн.Едит ("студентс", "ИД = & 1", табле.Цуррент.Кеи) едата.рунедит ( хресул) 'Позовите рунеедит метод у облику едата табле.Цуррент [0] = хресул ["ИД"] табле.Цуррент [1] = хресул ["фирст намес"] табле.Цуррент [2] = хресул ["презимена "] табле. Цуррент [3] = хресул [" аддресс "] табле.Цуррент [4] = хресул [" пхоне "] табле.Цуррент [5] = хресул [" маил "] цлосеЦоннецтион () Енд 
Активирајте догађај

Подебљана линија назива се едата рунедит метход. Пошто још нисмо креирали ову методу, ако покушамо да је покренемо сада, неће успети.

Вратимо се стога на старост и поставимо следеће променљиве на почетак обрасца тако да буду доступне из целог обрасца.

 Привате хцонн Ас Цоннецтион Приватни хресул Као резултат Приватно уређивање Као Боолеан 
Затим креирајмо нову методу тзв рунедит:
 Јавни под рунедит (подаци као резултат) хресул = уређивање података = Истина тктЦедула.Тект = хресул ["ИД"] тктНаме.Тект = хресул ["име"] тктНаме.Тект = хресул ["презиме"] тктАддресс.Тект = хресул ["адреса"] тктТелепхоне.Тект = хресул ["телефон"] тктЕмаил.Тект = хресул ["пошта"] Ме.СховМодал Крај 
Ово нам приказује податке са подацима изабраног записа тако да их можемо уредити и поставља варијаблу за уређивање са вредношћу труе. Ово је неопходно како би се употребом условне наредбе приликом клика бтна прихватити Разликовати ново и модификовати.

Можемо га тестирати иако још увек неће радити, још увек недостаје дугме за прихватање, али можемо проверити да ли нас води до траженог обрасца.

Хајде да конфигуришемо дугме за прихватање да бисмо сачували промене:

 Јавни под бтнАццепт_Цлицк () Ако уређујете Затим покушајте хресул ["цедула"] = тктЦедула.Тект Покушајте хресул ["имена"] = тктНамес.Тект Покушајте хресул ["презимена"] = тктСурнаме.Тект Покушајте хресул ["адреса"] = тктАддресс .Тект Покушајте хресул ["пхоне"] = тктТелепхоне.Тект Покушајте хресул ["маил"] = тктЕмаил.Тект Покушајте хресул.Упдате Елсе Покушајте хцонн.Екец ("уметните у вредности ученика (& 1, & 2, & 3 , & 4, & 5, & 6) ", тктЦедула.Тект, тктНаме.Тект, тктСурнаме.Тект, тктАддресс.Тект, тктТелепхоне.Тект, тктЕмаил.Тект) 'са овим уносимо информације послате Ендиф Ме.Цлосе () Цатцх Мессаге.Еррор ("Немогуће је унети послане податке") Енд 
Сада можемо да сачувамо промене.

8. Конфигуришите претрагу података


Додајте обрасцу дугме за претрагу и оквир за текст. Ово је нови изглед обрасца:

ЕНЛАРГЕ

Дугме за претрагу конфигуришемо на сличан начин као ново дугме, ово је код:

 Јавни под бтнБусцар_Цлицк () Дим хресул Као резултат Дим тастер Као Филтер Дим Филтер Као Стринг табле.Цлеар Иф ЦоннецтБасе () Затим вратите табле.Цолумнс.Цоунт = 6 табле.Цолумнс [0] .Тект = "Цедула" табле.Цолумнс [0 ] .Алигнмент = Алигн.Центер табле.Цолумнс [0] .Видтх = 100 табле.Цолумнс [1] .Тект = Табела "Имена". Колоне [1] .Алигнмент = Алигн.Центер табле. 120 табле.Цолумнс [2] .Тект = "Презиме" табле.Цолумнс [2] .Алигнмент = Алигн.Центер табле. Цолумнс [2] .Видтх = 120 табле. Цолумнс [3] .Тект = "Аддресс" табле. Колоне [3] .Алигнмент = Алигн.Центер табле. Цолумнс [3] .Видтх = 120 табле. Цолумнс [4] .Тект = "Пхоне" табле. Цолумнс [4] .Алигнмент = Алигн.Центер табле. Цолумнс [4] . Видтх = 120 табле.Цолумнс [5] .Тект = "Маил" табле.Цолумнс [5] .Алигнмент = Алигн.Центер табле. Цолумнс [5] .Видтх = 120 филтер = тктБусцар.Тект хресул = хцонн.Екец (" изаберите * од ученика где имена попут '"& филтер &"' ") До Вхиле хресул.Аваилабле кеи = хресул [" ИД "] табле.Адд (кеи, кеи) табле [кеи] [1] = хресул [" наме рес "] табела [лозинка] [2] = хресул [" презиме "] табела [лозинка] [3] = хресул [" адреса "] табела [лозинка] [4] = хресул [" телефон "] табела [лозинка] [ 5] = хресул ["маил"] хресул.МовеНект () Петља цлосеЦонекион () Крај 
Са оним што смо урадили, већ можемо бити јасни у вези са процесом, сада ћемо учинити исто са обрасцем за предмете. Тхе предложени распоред је следеће:

Као и увек, прва ствар коју ћемо програмирати је дугме за излаз:

 Публиц Суб бтнЕкит_Цлицк () Ме.Затвори крај 
Сада ћемо успоставити везу са базом података:
 Приватни хцонн као веза Приватна функција цоннецтбасе () Као логичко Ако хцонн Нулл Затим врати Фалсе хцонн = Нова веза хцонн.Хост = " / хоме / тест" хцонн.Наме = "студентс" 'име базе података хцонн.Типе = "склите3"' датабасе откуцајте Три хцонн.Опен () Иф Еррор Тхен хцонн = Нулл Мессаге.Еррор ("Грешка при повезивању базе података") Ретурн Труе Ендиф Ретурн Фалсе Енд 
Заказујемо догађај како бисмо прекинули везу:
 Публиц Суб цлосеЦонекион () Ако је хцонн = Нулл Затим врати хцонн.Цлосе () хцонн = Нулл Енд 
Сада визуализујемо податке у цолумнвиев, у отвореном случају обрасца.

Код је следећи:

 Јавни под Форм_Опен () Дим хресул Као резултат Дим тастер Као Филтер Дим Филтер Као Стринг табле2.Цлеар Иф цоннецтбасе () Тхен Ретурн табле2.Цолумнс.Цоунт = 2 табле2.Цолумнс [0] .Тект = "ид" табле2.Цолумнс [0 ] .Алигнмент = Алигн.Ригхт табле2.Цолумнс [1] .Тект = "Назив предмета или курса" хресул = хцонн.Екец ("одаберите * из предмета") Учините Док хресул.Доступан кључ = хресул ["ид"] табле2.Адд (кеи, кеи) табле2 [кеи] [1] = хресул ["маттер_наме"] хресул.МовеНект () Лооп цлосеЦоннецтион () Енд 
Сада креирамо образац за додавање и / или уређивање података табеле, предмета или курсева. Предложени назив је адата. (субјекти података).

9. Програмирамо дугме за затварање

 Публиц Суб бтнЦеррар_Цлицк () Ме.Затвори крај 
Креирамо референцу на објекат везе типа, у нашем случају хцонн, стога ћемо на почетак нашег адата обрасца поставити следећи код:
 Приватни хцонн као веза 
Осим тога, креирамо руннев метод који ће се позивати из главног обрасца. Синтакса је следећа:
 Публиц Суб руннев (подаци као веза) хцонн = подаци Ме.СховМодал () Крај 
Сада идемо на образац за унос података о предметима и у бтннуево клик догађај постављамо следећи код:
 Публиц Суб бтнНуево_Цлицк () Иф цоннецтбасе () Тхен Ретурн адата.руннев (хцонн) цлосеЦонекион () Форм_Опен () Енд 
Сада можемо пробај ново дугме наведеног облика.

Настављајући са истим обрасцем, кодирамо метод за измену записа на следећи начин. Искористићемо наш активациони догађај Цолунмвиев контрола (табела) да бисте додали ову функционалност. Овај догађај се покреће двоструким кликом на било коју колону у табели.

 Публиц Суб табле2_Ацтивате () Дим хресул Као резултат Иф табле2.Цуррент = Нулл Тхен Ретурн Иф цоннецтбасе () Тхен Ретурн хресул = хцонн.Едит ("субјекти", "ид = & 1", табле2.Цуррент.Кеи) адата.рунедит ( хресул) табле2.Цуррент [0] = хресул ["ид"] табле2.Цуррент [1] = хресул ["маттер_наме"] цлосеЦоннецтион () Крај 
Упамтите да неће радити све док не направимо овај догађај у адата форми. Вратимо се стога на фдата и поставимо следеће променљиве на почетак обрасца тако да буду доступне из целог обрасца.
 ПРИВАТЕ хцонн АС Цоннецтион ПРИВАТЕ хресул АС Резултат ПРИВАТНО уређивање АС Боолеан 
Креирамо рунедит метод чији је код следећи:
 Јавни под рунедит (подаци као резултат) хресул = уређивање података = Истина тктАсигнатурас.Тект = хресул ["субјецт_наме"] Ме.СховМодал Крај 
Не заборавите да тестирате да бисте проверили да ли све иде добро. Сада програмирамо дугме за прихватање као што следи:
 Јавни под бтнАцептар_Цлицк () Ако уређујете Затим покушајте хресул ["субјецт_наме"] = тктАсигнатурас.Тект Покушајте хресул.Упдате Иначе Покушајте хцонн.Екец ("уметните у вредности имена_предмета (& 1)", тктАсигнатурас.Тект) Ендиф Ме.Цлосе () Ухвати поруку.Еррор ("Није могуће унети послане податке") Крај 
Сада програмирамо рутину претраживања предмета:
 Публиц Суб бтнБусцар_Цлицк () Дим хресул Као резултат Дим тастер Као Филтер Дим Филтер Као Стринг табле2.Цлеар Иф цоннецтбасе () Затим вратите табле2.Цолумнс.Цоунт = 2 табле2.Цолумнс [0] .Тект = "ид" табле2.Цолумнс [0 ] .Алигнмент = Алигн.Ригхт табле2.Цолумнс [1] .Тект = "Назив предмета или курса" филтер = тктБусцар.Тект хресул = хцонн.Екец ("изаберите * из предмета у којима је назив_предмета попут '" & филтер & "' ") До Вхиле хресул.Аваилабле кеи = хресул [" ид "] табле2.Адд (кеи, кеи) табле2 [кеи] [1] = хресул [" маттер_наме "] хресул.МовеНект () Лооп цлосеЦонекион () Енд 
Имаћемо то спремно.

Закључци о козицама
За људе који су направили апликацију у Висуал Басицу и заинтересовани су за програмирање, ово је један од алата који ће вас несумњиво занимати и јасна је опција коју бисте требали размотрити.

Захваљујући тестовима које можемо видети у овом водичу, можемо видети да је лако радити и заиста не треба много времена за израду неке друге једноставне апликације за Линук.

Као што видимо, аутоматско довршавање које садржи козице ограничено је на објекат са којим радите, а не као у случају Геани -а, који вам може ставити било шта. Морамо му дати бодове јер ради као Јава и Нетбеанс и без даљих компликација.

Дакле, онима који желе научити програмирати једноставне апликације у Линуку и знатижељни смо, препоручујемо да испробате Гамбас3.

Ви ће помоћи развој сајта, дељење страницу са пријатељима

wave wave wave wave wave