Keresés

Új hozzászólás Aktív témák

  • Homer

    tag

    Sziasztok!

    A maskedtextbox osztállyal kapcsolatban egy érdekes dolgot tapasztaltam. Mindenkinél így működik, vagy én vagyok a láma ehhez (is)?
    Szal a problémám a következő: Az MSDN szerint a maszkolásnál a 0 maszk jelentése, hogy csak egy SZÁM KARAKTERT (0...9) fogad el a box, viszont azt KÖTELEZŐ megadni. 9-es maszk esetén kellene elfogadnia a space-t és valamilyen szám digitet.

    [link]

    Ehhez képest a 000-000 maszk simán engedi a " 1-234" vagy " - " vagy a "1 2- 3" karaktersorozatokat.
    Ez miért van? Hibás az osztály, vagy az MSDN leírás róla? Esetleg valami spec Visual Studio beállítás esetén műxik csak a dolog? Amiben próbáltam: Visual Studio 2010 (Visual Basic)

    Előre is köszönöm ha valaki segítő szándékú válaszra méltatna! :)

  • Homer

    tag

    válasz martonx #1408 üzenetére

    Köszi a választ, bár nem sokat segít amit írtál. Sajna most éppen dolgozom, de ha este hazamegyek kipróbálom a predefined maskokat, hogy azok hogy viselkednek. Ha valaki kipróbálná közben írja már le a tapasztalatát és a véleményét! Köszi előre is! És... UP! :)

  • Homer

    tag

    válasz Homer #1409 üzenetére

    Nah, kipróbáltam a standard maszkokkal is de azokkal sem jól működik. Valakinek valami ötlet, hozzászólás? :S

  • Homer

    tag

    válasz Homer #1413 üzenetére

    Üdv ismét! Gondoltam leírom amit azóta sikerült megtudnom. Azaz inkább azt írom le, hogy hogyan oldottam meg a feladatot. A maskedtextbox resetonspace tulajdonságának true-ra állításával a space-ekket "lekezeli a textbox". (Space inputra a maszk nem lép digitet ha azt a karaktert a maszk nem engedi, mint pl. a "0" maszk esetén.) Azonban így is gondot okozhat ha a user az arrow key-ekkel vagy egérrel elmozdítja kurzort begépelés közben. Ezt a kivételt utólag a MaskCompleted tulajdonság ellenőrzésével egyszerűen lehet kezelni. :) A megoldás tehát:

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    MsgBox(MaskedTextBox1.MaskFull)
    End Sub

    Private Sub MaskedTextBox1_TextChanged(sender As Object, e As System.EventArgs) Handles MaskedTextBox1.TextChanged
    If MaskedTextBox1.MaskCompleted Then Button1.Enabled = True Else Button1.Enabled = False
    End Sub

    A button1 így csak akkor elérhető ha teljesen ki van töltve a textbox, és oda pedig csak érvényes karaktereket (tehát space-t nem!) lehet írni. Probléma megoldva! :) Köszönöm mindenkinek aki esetleg gondolkodott rajta! :)

    [ Szerkesztve ]

  • Homer

    tag

    Sziasztok!
    Még csak a szárnyaimat bontogatom programozás terén, és nem is ez a szakterületem, de a munkám során néha jól jönne némi programozástechnikai ismeret, ezért vágtam bele a fejszémet a VB-be. Egy olyan dolgot szertnék kérdezni tőletek amire nem konkrét forráskódot várnék megoldásként, inkább az elméleti háttere érdekelne a dolognak.

    Adott egy collection amiben kétféle adattípusú adatot tárolnék. Az egyik féle osztályból (kereszteljük őket mondjuk "A-típus"-ra) létrehozott objektum tartalmaz vagy 5-6 féle mezőt + pár eljárást és függvényt a kezelésükre. A másik osztály (fantáziadúsan, legyen mondjuk "B-típus") az A típusból van örköltetve viszont még plussz 5 adatot tartalmaznának az ebből képzett objektumok. A kétféle objektum egy kollekcióba gyűjthető, és a "TypeOf(object) Is A-típus" kifejezéssel megállapítható az adott elem mezőinek mivolta is. Ahhoz, hogy a feltöltött listát megjeleníthessem használnék egy Listview1 objektumot.
    A lista elemeit fel tudom tölteni ehhez hasonló módon:
    ...
    For each elem as object in kollekció
    if typeof(elem) is Atípus then listview1.items.add(elem.mező_a)
    ...(elem.mező_b)
    ...
    else
    listview1...items.add(elem.méret1)
    next

    A kérdésem az lenne, hogy az ily módon feltöltött listview-ból hogyan tudom visszanyerni az eredeti objektum "helyét" a kollekcióban? Lehet hogy alapból rosszul gondolkodom és nem is így kéne hozzálátni a feladathoz. Már többféleképpen is próbáltam, de mindig zátonyra futok valahol. A gond akkor jelentkezik amikor kijelölök egy listaelemet és ki akarom törölni a kollekcióból. Arra gondoltam, hogy a törlési eljárásban deklarálok egy objektumot, aminek manuálisan visszatöltöm az adatmezőit és ezt az objektumot használom a beazonosításra.

    így valahogy:

    sub gomb1.click(...)handles gomb1.click
    obj.mező1 = listview1.selecteditems(0).items.tostring
    obj.mező2 = istview1.selecteditems(0).subitems(0).items.tostring
    ...(és így végig az összes mezőn)
    ...
    törlés(obj)
    end sub

    sub törlés(mit as object)
    kollekció.remove(mit)
    end sub

    Nagy balgaságot követek el így? Van ennél egyszerűbb mód, azon kívül hogy adatbázist használnék? (Még addig nem juttotam el a könyvben :$ :). Még egy dolog mielőtt valaki az index-ek használatán gondolkodna: A listview-ban emelkedő sorrendben szeretném megjeleníttetni az elemeket, ami azt eredményezi hogy pl a 100-adiknak beírt adat legelőre kerül 0-s index-el(!), viszont a kollekcióban pedig időrendi sorrend szerint vannak tárolva. Viszont ami egyszerűsíti a helyzetet az az, hogy egy objektum sem ismétlődhet a sorban.

    Előre is köszönöm ha valaki válaszra méltatna és megérti a kérdésemet! :)

  • Homer

    tag

    válasz martonx #1544 üzenetére

    Az a kérdés, hogy:
    Ha egy kollekció elemeit listview-ban jelenítem meg akkor az egér jobb klikk-jére megjenő törlés menüponttal hogyan tudom kitörölni a kollekció megfelelő elemét?

    Egyébként a kérdőjel azt jelenti a mondat végén, hogy az egy kérdés lenne. A fenti hsz-ben pedig:

    "A kérdésem az lenne, hogy az ily módon feltöltött listview-ból hogyan tudom visszanyerni az eredeti objektum "helyét" a kollekcióban?"

    [ Szerkesztve ]

  • Homer

    tag

    válasz martonx #1546 üzenetére

    Ne haragudj meg, de nem szeretném elárulni pontosan mi a feladat, és szerintem nem is az a fórumozás célja, hogy más oldja meg helyettünk a feladatot. Ezért kérdeztem általánosságban. Így lesz véleményem szerint a legtöbb fórumozó számára hasznos az általad javasolt megoldás is.

    Egyébként köszönöm a hsz-edet! A listview-ból való törlés valóban egyszerű megoldás lenne, csak szerintem nem túl elegáns ilyenkor újraépíteni a kollekciót.

    Mivel a kollekció elemeire csak az indexükkel lehet hivatkozni, az okozta a gondot, hogy a névsorba rendezett lista indexei összekeveredhetnek az eredeti kollekció indexeihez képest. A megoldást közben én is megtaláltam (pár órás próbálkozással rájöttem), hogy a collection elemeire lehet key-el is hivatkozni. Mivel a key sem visszakereshető programból, (így a listview feltöltésekor sem tudom átadni az adott elem key-jét), a kollekció minden objektumához hozzárendeltem egy-egy key integert. Ezt a key-t átadva a kollekció remove metódusának törölhető a kívánt elem.

  • Homer

    tag

    válasz 26centi #1551 üzenetére

    Szia!
    Ha tudod a sorok számát akkor:

    Sub Akarmi()
    Worksheets(1).Select
    Dim ujsor As Integer
    ujsor = 1
    For Index = 1 To 10
    Rows(CStr(Index) & ":" & CStr(Index)).Select
    If Cells(Index, 2).Text <> "#HIÁNYZIK" Then
    Selection.Copy
    Worksheets(2).Select
    Rows(CStr(ujsor) & ":" & CStr(ujsor)).Select
    ActiveSheet.Paste
    Worksheets(1).Select
    ujsor = ujsor + 1
    End If
    Next Index
    End Sub

    Egyébként én cellánként másolgatnám az értékeket anélkül, hogy mindig kijelölgetném a második worksheetet valahogy így:

    Ha a vizsgált cella értéke megfelelő akkor
    Worksheets(2).Cells(XY).text=worksheets(1).cells(ZY).text
    (Sokkal gyorsabb lesz afutása a makrónak, és nem vibrál a kép futás közben ;) )

    Jah, bocs, elfelejtettem írni, hogy az a baj, hogy a sor kijelölésének formája:
    Rows("1:1").select
    Ebből gondolom látod mi a gond: String paramétert várna a rows sub
    Remélem segítettem :)

    [ Szerkesztve ]

  • Homer

    tag

    válasz 26centi #1551 üzenetére

    Ha tudod a sorok számát akkor még ehhez hasonlóval is próbálkozhatsz:

    For Each elem In Range("A1:A10")
    MsgBox (elem.Text)
    Next

  • Homer

    tag

    válasz 26centi #1558 üzenetére

    Szia!
    "A makrót ugyan a forrás munkalaphoz hoztam létre..."
    Szerintem ezzel is lehet gond. Csinálj egy modult és másold át abba a makródat. Egy próbát megér.

    Közben rájöttem, hogy balgaságot írtam. :B
    A Rows nem csak Stringet hanem integert is el kellene hogy fogadjon, tehát a
    Rows("2:2").select-nek ugyan úgy működnie kéne mint a Rows(2)-nek.
    Bocs. :)

  • Homer

    tag

    válasz Baboka #1561 üzenetére

    Szia!

    Nem teljesen értettem amit akartál, de ha minden igaz akkor ilyesmi válaszra vársz. :)
    Egyrészt az nem teljesen világos, hogy az intersect minek bele? Gondolom a több cella egyszerre történő kijelölése végett van benne, így ez esetben az általam javasolt megoldás nem működik majd. De azért gondolkodtam rajta. Tess:

    Public elozo, default As Integer
    Const uj = 3

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    'Az új sor színének beállítására
    Rows(Target.Row).Interior.ColorIndex = uj

    'Annak a vizsgálatára, hogy kell-e visszaállítani formátumot, azaz első kijelölés, vagy már volt előtte kijelölve valami?
    If elozo <> 0 Then
    Rows(elozo).Interior.ColorIndex = default
    End If

    'Az előzőleg kijelölt sor száma
    elozo = ActiveCell.Row

    ' itt az eredeti cella formátumát kellene beállítani az 5 helyett de ezt pontosan nem értettem a leírásodból... :S
    default = 5
    End Sub

  • Homer

    tag

    válasz Sweet Lou 6 #1563 üzenetére

    Üdv.

    Pár könyv amiket én nézegettem:
    Magyar és angol nyelven is elérhetők:
    Fekete (és Kék) könyv. (Black book)
    Alex Mackey - A NET 4.0 és a VS 2010

    Csak angol:
    Visual Basic 2010 Programmer's Reference
    Professional Visual Basic 2010 and .NET 4
    Visual_Studio_2010_All-in-One_For_Dummies

    ...és ha nagyon kezdő vagy (, mint én is), akkor ezek is hasznosak lehetnek, mert a VB alapok elsajátításához szerintem jók:
    James Foxall - Tanuljuk meg a Visual Basic 2005 használatát 24 óra alatt
    Demeter M. Ibolya - Visual Basic 6.0 lépésről lépésre
    Juhász Tibor, Kiss Zsolt- Visual basic 2008-2010 Programozasi összefoglalo
    Tóth Bertalan - Programozzunk vb rendszerben

    (Úgy írtam a neveket, hogy rákeresve gugliban az első-második találat már a közvetlen link lesz.)

    [ Szerkesztve ]

  • Homer

    tag

    válasz Baboka #1569 üzenetére

    Örülök, hogy segíthettem. :)

    Egyébként ajánlok neked is egy könyvet:
    Balogh Gábor - Visual Basic és Excel programozás
    a neten megtalálod...

    Megpróbálom elmagyarázni mi nem volt teljesen világos:

    - Szóval ha van egy táblázatod amiben minden sor (esetleg minden oszlop is) egyforma formátumú, akkor nem gond ha előre meghatározott stílust állítasz be default értéknek.
    régi sor(x) stílus = régi formátum

    - Ha a sorok megegyeznek, de az oslopok formátuma eltér (pl színük más) akkor a cellék formátumát egyesével kell állítgatni.
    régi cella(régi sor, oszlop(1...x)) formátuma = default cellastílus (régi sor, oszlop(1...x) formátuma

    - Ha az eredeti sorok formátumai is eltérnek egymástól (azaz különbözőek), akkor még bonyolultabb a helyzeted, mert a default értéket az eredeti stílus szerint kell meghatározni.
    tehát pl a visszaállításnál a
    cella1 stílus = eredeti cellaformátum1.oszlop
    cella2 stílus = eredeti cellaformátum2.oszlop
    ...

    Tudom nem teljesen érthető a magyarázat, bocs. :)

  • Homer

    tag

    válasz vilag #1586 üzenetére

    Én úgy oldanám meg első körben, hogy a fejléc sorain végigmennék egy each cells in row(1) ciklussal, aztán egy változóban eltárolnám azt az oszlopszámot ahol a cella értéke megyezik a keresett oszlopnévvel. Ezután már hivatkozhatsz arra az oszlopra mint oszlop sorszám...

  • Homer

    tag

    válasz Homer #1587 üzenetére

    Vagy pl:

    Public Sub test()
    Dim Keresett As String
    Keresett = "Keresettoszlopszövege"
    oszlop = 1
    Dim megvan As Boolean
    megvan = False
    While Worksheets("Munka1").Cells(1, oszlop) <> Keresett And Not megvan And _ Worksheets("Munka1").Cells(1, oszlop) <> ""
    oszlop = oszlop + 1
    If Worksheets("Munka1").Cells(1, oszlop) = Keresett Then megvan = True
    Wend
    If megvan Then MsgBox (Keresett & " megvan, a következő oszlopban: " & oszlop) Else MsgBox ("Nincs meg")
    End Sub

    Mondjuk ha a keresett oszlop pont az első akkor nem működik, de nem tartana sokáig módosítani, hogy azzal is működjön. (Neked is hagyok gondolkodni valót :) )

  • Homer

    tag

    válasz vilag #1591 üzenetére

    Ha olyan függvényt írsz ami paraméterként megkapja a keresett szöveget, visszaadási értéke pedig az oszlop száma akkor elég egyszer megírni:

    Pl:

    private function oszlop(byval mitkeresel as string) as integer
    itt pedig a fent leírt módszerrel
    end

  • Homer

    tag

    válasz vilag #1591 üzenetére

    Ha olyan függvényt írsz ami paraméterként megkapja a keresett szöveget, visszaadási értéke pedig az oszlop száma, akkor elég egyszer megírni, utána használhatod a függvényt ahányszor, és ahol csak akarod!

    Valahogy így:

    private function oszlop(byval mitkeresel as string) as integer
    itt, a fent leírt módszerrel a fejlécsor összes elemén végigmész, majd
    ha megvan a keresett oszlop akkor
    return keresettoszlopszám
    else
    msgbox("Nincs meg minden oszlop")
    end

    [ Szerkesztve ]

  • Homer

    tag

    válasz martonx #1594 üzenetére

    Nem olyan bonyolult ez. Nekem nem ez a munkám, de érdekel a dolog.
    Ezt hoztam össze:

    Public Sub proba()
    ....MsgBox (keres("h"))
    End Sub

    Public Function keres(mit As String) As Integer
    ...Dim elem As Object
    ...Dim oszlop As Integer
    ...oszlop = 0
    ...For Each elem In Range("A1", "Q1")
    .....oszlop = oszlop + 1
    .........If mit = elem.Value Then
    .............keres = oszlop
    .........End If
    ...Next
    End Function

    Hogy olvashatóbb legyen bepontpontpontoztam. :) Persze ha picit még gondolkodnék rajta biztosan találnék más megoldást is. (Pl. az elem típusa nem túl elegáns object-ként kezelve, dehát műxik.)

    A lényeg, hogy ha írsz egy ilyen function-t akkor azt bárhányszor meghívhatod a fenti sub-ban. Ez a megoldás A-tól Q oszlopig vizsgálja az egyezéseket. Ha nincs egyezés akkor 0-val tér vissza a függvény.

    [ Szerkesztve ]

  • Homer

    tag

    válasz vilag #1597 üzenetére

    Én még sosem használtam eddig a HOL.VAN függvényt, de jah, igazad van! Azzal is meg lehet oldani a feladatot. (Mondjuk a fenti megoldásom is hasonló eredményt adna.) :)
    A konkrét feladattól függ, hogy én melyiket használnám. Ha nem muszáj makrobizni, akkor én a helyedben megmaradnék a "gyári" függvényeknél...

  • Homer

    tag

    válasz vilag #1606 üzenetére

    Juhuhuhúú... :) Azt kell, hogy mondjam, részben egyetértek az előttem szólóval. Az excel már ehhez egy kicsit kevés, és nem erre való!

    Ami miatt viszont meg tudlak érteni, az az hogy hasonló cipőben járok. A cégnél ahol dolgozom nekem is sokat segít a makró, és én is ezért kezdtem el foglalkozni a VB-el és a VBA-al. Nálunk SAP van és abban kellene megoldani a hasonló feladatokat, de a fejlesztés időbe telik, és az a szomorú tapasztalatom, hogy ha kérünk egy programfejlesztést akkor hosszas várakozás után ugyan történik valami, de mégsem olyan lesz a z új program mint amilyet szerettünk volna.Hasonó kaliberű programokat írogattam már én is a könyvelgetéseinkhez. (SAP mellett! Egyik kollégám szerint az SAP a "Sz*pjon A P*raszt"-nak a rövidítése :) )

    Kérdésedre:
    Én egyesével töltögetném fel az oszlopban lévő adatokkal a combobox items gyűjteményét.

    valahogy így:

    dim e as scripting.dictionary
    for each elem in column(x)
    ...if not consist e elem.value and elem.value<>"" then e.add(elem.value
    next

    A fenti megoldás csak ötletelés, nem írtam be sehová, tehát valszeg nem működik ha copy-paste-zed :)

  • Homer

    tag

    válasz erich85T #1614 üzenetére

    Elképzelhetőnek tartom, hogy a kimutatás eszközzel lehet makró nélkül is ilyet, de nem biztos.

  • Homer

    tag

    válasz kisi #1622 üzenetére

    Hello,
    én így csinálnám:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _
    ..........................As System.EventArgs) Handles Button1.Click
    .........Dim valasz As integer
    .........valasz = MsgBox("Hello", MsgBoxStyle.YesNo, "Semmi")
    .........MsgBox("A válaszod: " & valasz)
    End Sub

    Eszerint az igen válasz esetén a valasz változó értéke 6 nem esetén pedig 7. ;)

    ...mondjuk ez nem VS2010 hanem VB2003, de sztem használható lesz...

    ... ha pl kilépésre akarod használni akkor tovább folytatva:

    if valasz = 6 then end

    [ Szerkesztve ]

  • Homer

    tag

    válasz martonx #1623 üzenetére

    Szerintem erre gondolsz:

    dim ujform as new form
    if ujform.showdialog =dialogresult.OK then....

    Itt a dialogresult eredményét neked kell beállítani a dialog-ban.

  • Homer

    tag

    válasz Homer #1625 üzenetére

    És végezetül, hogy ezzel is bővítsük a kérdező fegyvertárát, van még egy lehetőség az adatok bekérésére! Ez pedig az inputbox:

    dim uj_valtozo as string
    uj_valtozo=Inputbox("Mi legyen az új változó értéke?")

    Talán hasznos lehet ez is.

  • Homer

    tag

    válasz Homer #1626 üzenetére

    Még egy kicsit gondolkodtam rajta. Ez is működik: :)

    If MessageBox.Show("Hello", "Hello", MessageBoxButtons.YesNo) = DialogResult.Yes Then MsgBox("Ráokéztál")

  • Homer

    tag

    Sziasztok!

    Mint már korábbi hsz-eimben is írtam, autodidakta módon próbálom elsajátítani a VB-t, ezért előre is elnézést kérek, ha valami gagyi dolgot kérdeznék, amit természetes, hogy mindenki tud, csak persze én nem. :$
    Kérdésem annyi lenne, hogy oop-ban milyen módon érdemes felépíteni az objektumokat adatbázis kezeléshez? Honnan tudnám ezt megtanulni? Tudtok valami jó könyvet hozzá? A VB fekete könyvet végigolvastam, de számomra nem derül ki belőle, hogy mi lenne az optimális út.? Tulajdonképpen megismertem általa magát a nyelvet, csak nem tudom optimálisan használni. :S
    Egy konkrét, egyszerű példa, pl:
    oldedb-vel beolvasok egy adatkészletbe pár táblát, amik közt kapcsolatokat is definiálok. (Teszem azt személyeket tartok nyilván, ID alapján, mellette egy másik táblában a szemük színét. A két tábla közt pedig egy fordítótábla van. Pl: Az első tábla 1. személyéhez tartozik a második tábla 6. sorában található kék szín. Ezt tárolja a 3. tábla.) Eddig gyönyörű is a történet, megvannak a kapcsolatok, tudok vezérlőket kötni a táblák adataihoz is, ez alapján akár még szűrni is a grid megfelelő sorait. Mondjuk módosítani akarok bizonyos adatokat vezérlőkkel, és nem közvetlenül egy kapcsolt datagrid-ben, esetleg egy új formon, amiben ki akarom választani egy combobox-ban a személyt, majd szemszínt egy listbox-ból. A változást vissza akarom írni az Access mdb file-ba.
    Itt jön a kérdésem. Ha a fenti módon járok el, akkor a formok közti adatátadás során a készlet szűrt sorainak átadása jelent gondot, hiszen a szülő form adatait csak a sorszámuk alapján tudom elérni, vagy generálni kell hozzá egy key-t, ami véleményem szerint plusz adatokat generál. Sikerült így is megcsinálnom a progit, ami hellyel-közzel működött is.
    Csinálhatnék az új formon is egy új adattáblát, amibe „átmásolom” a szülő form eredménylistáját a form deklarálása után.
    Aztán gondoltam személy-objektumokkal próbálom megoldani. Ekkor csináltam minden egyes emberről egy objektumot. Az objektum tartalmazta a személy ID-jét is, így egyszerű volt kikeresni a táblában, hogy melyik személyre vonatkozik a módosítás. Megúsztam a formok közti adatcsere gondját is, hiszen egy kollekcióban át tudtam adni az összes módosítani kívánt személyt, ID-vel együtt. Itt viszont azért kellett plusz adatokat generálni, mert beolvastam az adattáblák adatait az adatkészletbe, aztán onnan megcsináltam az objektumokat, ergo mindent 2x kellett memóriába tölteni, cserébe viszont egyszerű volt megkeresni, hogy melyik sort kell módosítani a készletben, és az adatkészlet tábláinak update-elése is tötrénhetett egy-egy sima dataadapter.update(dataset) procedúrával.
    Még arra is gondoltam, hogy a kettő fenti megoldást lehetne ötvözni, és olyan objektumokat létrehozni, amelyek nem az adatkészletből generált komplett adatobjektumokat kezelnek, csak bizonyos rekordmezőket tárolnék bennük aztán ez alapján beazonsítom a kívánt sort, majd elvégzem a kívánt módosítást az adatkészletre való közvetlen hivatkozással.
    Remélem értitek a kérdésemet! Ezt hogy szokta megoldani egy vérbeli, ultraexpert, unatkozó programozó? Tudtok esetleg olyan oldalt ahol példákat találhatnék hasonló tipikus feladatokról? Nem kód érdekelne tehát, hanem az alapelgondolás. Mire építsem fel az objektumok rendszerét, és mikor? Úgy értem, esetleg egy datareader ismegoldás lehet, ahol nem kell adatkészletet feltölteni. Így egyből tudnék objektumokat létrehozni.

    Előre is köszi minden válaszra méltónak!

  • Homer

    tag

    válasz martonx #1741 üzenetére

    :$
    Igazából nekem tök mindegy, hogy VB6 vagy VB net. :) Lehet furán hangzik ez így, de alapnak sztem jó volt a könyv, és hozzá tudok nyúlni bármikor, ha éppen nem jut eszembe egy kifjezés szintaktikája.
    Nézegettem amit javasolsz! Lehetséges, hogy tényleg ezt keresem. :) Köszi!

  • Homer

    tag

    válasz martonx #1741 üzenetére

    Mégsem jó ez a megoldás. Amennyire most látom, az EF-et nem tudom használni, csak SQL adatszolgáltatóval. Jól látom, hogy ha én egy adatbázis file-t szeretnék OLEDB-vel közvetlenül kezelni akkor ez nem használható?

  • Homer

    tag

    válasz ArchElf #1744 üzenetére

    Hát jó, legyen... :)
    De akkor most az új kérdésem: lehet használni az EF-et helyi Access (mdb) adatbázis file kezeléséhez?

    [ Szerkesztve ]

  • Homer

    tag

    válasz martonx #1747 üzenetére

    Köszönöm a sok infót amit írtok! Az a helyzet, hogy nem tudok ilyen megoldásokat használni. Nézegettem már a MySQL-t, meg az SQL-t korábban, hogy képben legyek valamennyire miről is szól a kliens-szerver megoldás, de mivel munkahelyi gépen szeretnék kezelni adattáblákat, ott nem tudom megoldani, hogy adatkiszolgáló(ka)t telepítsek. A mezei futtatható exe-t viszont el tudom indítani majd, és egy megosztott mappába helyezett mdb file-t meg "egyszerű" lesz kezelnem, és létrehoznom is. ...gondoltam én, kis naív... :)

    Tudom, hogy igazatok van, VB és .NET majdnem ég és föld, viszont itthon azt telepítek amit akarok, ezért feltettem a VS2010-et, azonban benn a cégnél csak egy régi VB2003 van feltelepítve. (Ez is agyonra kicsontozva, de ez most mellékes. Még súgó sincs benne...) Ezért mondom, hogy felváltva használom mind a kettőt, így számomra mindegy, hogy .NET vagy sem, hogy 2003 vagy 2010, vagy akár az is hogy VS vagy annak csak egy része, azaz VB. :)
    Amúgy, nem kenyerem a programozás, mm nem szakmám. Csak úgy mellékesen tanulgatom ráérő időmben, mert néha sokat tud segíteni egy-egy excel makró is. :) Ennek sincs köze ugye a .NET-hez. .NET-ről olvasgatva meg, van pár(száz) oldalnyi eltérés, de sztem tök érthető a kód, ha eltérés van is. Az alapok hasonlók, ha nem is ugyan azok. Pl.: az alapok megértéséhez, kapcsolódáshoz szükséges objektumok megértéséhez hasznosnak találtam, de ízlések és pofonok kérdése. :) Am. az EF-ről eddig még nem hallottam, szal már kaptam hasznos infót tőletek, ezért jó fórumozni! Köszi még 1x!

    Visszatérve az alap kérdéseimre: Ti hogyan oldanátok meg ilyen feltételek mellett a program működését? Arra lennék kíváncsi, hogy minden egyes rekordot egy-egy objektum-ként kezelnétek és az objektumok felelnének az adatkészlebe írásért, vagy inkább az adatkészlettel "trükköznétek" közvetlenül?
    A másik kérdésem pedig az volt eredetileg, hogy az ablakok közti adatcserét hogyan oldanátok meg? Az egész adatkészlet public-ká minősítésével a programban, objektumok (objektum kollekciók) átadásával, új rekordkészletekbe másolnátok az első készlet megfelelő mezőit, esetleg valami más módon? (Belegondolva..., tulajdonképpen ebből ered az első kérdésem is :B :D )

  • Homer

    tag

    válasz martonx #1749 üzenetére

    Tulajdonképpen egy "egyszerű" szerszámnyilvántartó progit szeretnék csinálni. A különböző féle szerszámokat egy táblában tartanám nyilván, a jellemzőiket egy másikban. A progival lehetne új szerszámot felvenni, átkönyvelni két tárhely közt, életutat figyelni (azaz mikor lett kikönyvelve és mikor kaptuk vissza). A "gond" az hogy a szerszámok közt van olyan amik egyformák, de meg kell különböztetni őket egymástól. Ezeket a rajzszámuk és egy egyedi azonosító alapján lehet egyértelműen meghatározni, de értelem szerűen a jellemzőik egy másik táblában ugyan azok. Remélem érthető vagyok.
    Nah, és itt jön az amit kérdeztem. Teszem azt az első Form-on megjelennének egy listbox-ban, vagy comboboxban, vagy datagrid-ben, vagy datagridview-ban ha már VB2010 :) - de tulajdonképpen tök mindegy - a jellemzőkben felsorolt szerszámok. Ha valamelyiket kiválasztom, akkor egy új ablakban (hogy miért új ablakban, annak is megvan az oka) egy listbox-ban már csak az ehhez tartozó egyedi azonosítók jelennének meg. Itt kiválasztom a megfelelő egyedit, majd egy könyvel gombon meg kellene adni hogy egyrészt kifelé, vagy befelé történt a könyvelés, egy állaptra vonatkozó típusú érték paramétert kellene megadni, és tulajdonképpen ennyi.
    Ezt a feladatot már többféle módon is megoldottam.
    Legegyszerűbb az volt, amikor a dataset megfelelő tábláit hozzákötöttem a vezérlők datasource tulajdonságaihoz. Itt ott akadtam el amikor egy kapcsolótáblával kellett volna dolgoznom. Tehát mondjuk a második ablakban a szerszám neveit - típus alapján - egy harmadik táblából (PL.: Szerszám neve a jellemzők táblában csak egy kód, amit a harmadik táblából tároltam) kellett volna kiválasztani. Ekkor gondoltam arra, hogy adatkészletből feltöltök egy objektum kollekciót (itt minden objektum már létrehozásakor kikeresi számára a hozá tartozó infókat (név, azonosító, tulajdonságok, állapotinfók...stb), majd ezeket már egyszerűen tologathatom a Formok közt. Így is megcsináltam. Itt tök egyszerű a szerszám beazonosítása ID alapján, és az SQL parancsok is végtelenül leegyszerűsödtek :). A formok közt is már csak egy kis kollekciót kell átadni. Véleményem szerint nem túl elegáns dolog viszont az, hogy feltöltök egy adatkészelet, aztán azt még "átképzem" objektummá, és innen ered a kezdeti kérdésem... Még arra gondoltam hogy egy (-két..-öt?) datareaderrel is meg lehetne oldani ugyan ezt, így még nem próbáltam, de a visszaíráskor akkor megint SQL-ben kellene megírni az utasítsokat, ami (szintén) nem erősségem. Meg hát szerintem még 100 más módon is meg lehetne oldani.

    [ Szerkesztve ]

  • Homer

    tag

    válasz himre82 #1764 üzenetére

    Szia Himre82!

    Nem lett még kész a progim, de apránként azért haladok vele. :)

    Nem akartam leírni az egész problémát mert hát nem várom el senkitől, hogy megodja helyettem, és tulajdonképpen csak egy-egy részében akadok el mindig. Ezekre itt-ott mindig találok is megoldást, csak később mindig máshol futok hasonló zsákutcákba. Na de akkor már ezt is közkincs tárgyává teszem:

    Sajna nem tudok sql servert használni, mert a progimat munkahelyi környezetben használnám majd, és ott nincs lehetőségem adatszolgáltatót üzemeltetni. :\ Ezért maradtam az access file-nál. Hogy ezt is magyarázzam egy picit, az Excel kezelésével a kollégák nagy része már találkozott, így nem okoz gondot nekik a táblák módosítgatása az eddig használt VBA makrós nyilvántartásban (...ezzel persze hibákat generálva a program futásában...). Tudom, itt is le lehetne védeni a munkalapokat jelszóval, de úgy gondoltam, ha már VB, akkor kicsit fejlesztem a tudásomat és gyakorlásképpen megpróbálom inkább megcsinálni az adatkezelő progit, ami már nem excel táblákat módosítgat, hanem igazi adatbázis motorra épül. (Most jöhetnek a kritikák, hogy akkor meg miért nem tisztán accessben csinálom meg? A kérdés jogos! A válsz: azért, mert tanulom a VB-t! Mivel nem szakmám a programozás, csak hobbi szinten űzöm! Szerintem ez is nagy dolog már, hogy idáig eljutottam önszorgalomból.) Az Exceles táblával amúgy azóta semmi gond nincs. Az első pár hiba után, amit manuálisan javítottam, elmagyaráztam többieknek, hogy mi okozta, és azóta mindenki rendesen használja, csak amikor azt megírtam, akkor még nem volt arra igény, hogy mind az állapotfigyelt, és mind a nem állapotfigyelt szerszámot egy rendszerben kezeljük. (A másik dolog, hogy a VB tudásom is sokat fejlődött azóta, és egy csomó dolgot már nem úgy csinálnék meg mint anno.)

    Az SQL áttanulmányozása egyébként jó ötlet! Egyet is értek veled, de egyelőre megmaradnék az SQL alapoknál. Később biztos ráfekeszem majd erre is, ha még érdekel majd a dolog. Tényleg jó dolgokat meg lehet csinálni vele, az eddigi tudásoml már elég ahhoz, hogy ezt belássam. :)

    [ Szerkesztve ]

  • Homer

    tag

    válasz EkSYS #1943 üzenetére

    Pl. vb.NET-ben:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    x = InputBox("Add meg a textboxok számát", "Program", 1)
    For i As Integer = 0 To x - 1
    Dim teksztboksz As New TextBox
    teksztboksz.Location = New Point(10, 5 + i * 20)
    Me.Controls.Add(teksztboksz)
    Next
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim hanyadik As Integer = 0
    For Each elem As Object In Me.Controls
    If TypeOf elem Is TextBox Then
    hanyadik += 1
    If elem.text <> "" Then
    MsgBox("A(z) " & hanyadik & ". textbox tartalma: " & elem.text)
    End If
    End If
    Next
    End Sub

  • Homer

    tag

    Linkeljetek már légyszi egy olyan oldalt, ahol arra találok példát, hogy hogyan szokás azt megoldani, hogy egy feltöltött adatkészlethez (több táblával pl. form1-en vagy megosztva), egy másik formról, pl. form2-ről kérnek be olyan adatokat, melyeket szintén ezen adatkészletben tárolt adatok alapján lehet kiválasztani pl. különböző combobox-okból, (tehát ugyan azon adatkészlet más-más tábláiból), és az eredményt szintén ebben a táblában tárolják.
    (Remélem érthető vagyok. :) )
    Köszi!

    [ Szerkesztve ]

  • Homer

    tag

    válasz Homer #1959 üzenetére

    Hogy érthetőbb legyek:

    Tábla 1:
    Autó színe Rendszám Típus
    1 AAA-000 2
    2 BBB-000 1

    Tábla 2:
    Színkód Szín
    1 Piros
    2 Zöld

    Tábla 3:
    Tíuskód: Típus:
    1 Trabant
    2 Ferrari

    Mind a 3 tábla egy adatkészletben van a form1-en. A táblák közti kapcsolatok beállítva.
    Ez a form, teszem azt, az adatok táblázatos megjelenítésére való, egy datagriddel, amely kötve van a Tábla 1-hez, és van rajta egy nyomógomb ezzel a felirattal:"Új rekord felvitele"

    Most nyitok egy új formot (form2)

    A form2-n van egy textbox a rendszám beírásához, meg két combobox melyből egyik a szín bevitelére másik a típus bevitelére szolgál. Ha itt okét nyomok akkor kellene a form1-nek visszaadni az értéket.

    Ilyenkor hogy szokás átadni az adatokat form1-ről form2-re?
    v1: Form2-n új adattáblákat csináljak és feltöltsem a form 1 táblák adataival?
    v2: Dataview-ok használatával?
    v3: Csak String-ekkel töltsem fel a listboxokat, aztán a kiválasztott értéket keressem vissza a main adatkészlet megfelelő táblájában?

    [ Szerkesztve ]

  • Homer

    tag

    válasz martonx #1961 üzenetére

    Nem!

    Akkor még egyszer!

    A három tábla tehát:
    1. Egy összegző (fordító) tábla, mely tartalmaz egy rendszám oszlopot, egy típuskód oszlopot, és egy színkód oszlopot
    2. Egy Típus tábla, mely tartlamaz egy típuskód, és egy típus(szöveg) oszlopot
    3. Egy Szín tábla, mely tartalmaz egy színkód oszlopot és egy szín(szöveg) mezőt

    (Nem tudtam rendesen formázni a PH-n a táblákat korábbi levelemben mert csak egy szóközt enged..., talán ezért volt félreérthető.)

    A táblák közti kapcsolatok beállítva.
    Típus tábla elsődleges kulcsa a típuskód mező, mely idegen kulcs a fordító táblában.
    Szín táblában a színkód elsődleges kulcs, és ez is idegen kulcs a a fordító táblában.

    Szóval, a nyitóformon megjelenik az öszes rekord. (Nyilván nem a színkóddal és a típuskóddal, hanem a szín és a típus szöveggel, ergo sima adatkötéssel nem tudom ezt megoldani (legalábbis eddigi tudásom szerint), de nem is ez most a kérdés.)

    Szal eddig okés.

    Nah, és itt és most, szeretnék egy új ablakot nyitni az új adatok felviteléhez.
    Az új ablakban lenne mondjuk egy textbox a rendszám beírásához, és két combobox a szín és a típus kiválasztásához.
    A comboboxoknál a displaymember tulajdonságát a szöveges mezőkre, datamember tulajdonságát a kulcs oszlopra állítva tudom állítgatni a dolgokat, és egy adatsort visszaadva a főformnak, már hozzá is adható az új sor a fordítótáblához.

    Valami ilyesmit szeretnék csinálni, és ehhez szeretnék találni forráskódot, amit vizsgálgatni tudnék, hogy hogy szokás az ilyen "problémákat megoldani".
    Valójában amit itt írtam az nem a valós probléma, amit meg kellene oldani, de nem is várom el, hogy azt megoldjátok helyettem. A konkrét feladatom megoldásához vagy 5-6 táblát kellene átadogatnom a formok közt. Ezért vannak kételyeim, hogy szerencsés-e az a megoldás, ha átadom (akár) az egész adatkészletet (adot esetben akár 99 másik formnak is?), vagy egy profi programban inkább egy megosztott készletet használnának. Referenciaként adják át, így nem többszöröződik a memóriában az adatkészlet? Esetleg csak az 5-6 táblát adják át ilyenkor? Ez pedig ennyi paramétert követelne a 2. form konstruktorában...

    Összegezve: ezért lennék kíváncsi egy olyan valaki hozzászólására aki "látott már ilyet". :)

    [ Szerkesztve ]

  • Homer

    tag

    válasz martonx #1966 üzenetére

    Meggyőzlek!
    1.: Azért mert nem itthoni gépre kell fejleszteni! Adott a környezet amiben dolgozni kell.
    2.: Kicsit olyan mintha neked azt mondanám, hogy programozó létedre magadnak cseréled ki a dugattyúgyűrűt a trabantodban. Attól, hogy az autószerelés nem a szakmád még érdekelhet a dolog. És amikor azt mondod, hogy van már sokkal jobb is (vb.net helyett akármi), igazat adok neked! Tényleg van már sokkal jobb autó is mint a trabi, de a lehetőség adott. Hiába írnék a Porsche topicba...

    Arra a mondatra, hogy az adatbázisba csak berakom, a formokon meg kezelem..., pont ez az! Az adatbázisban (értsd adatkészletben) vannak az adatok amikből a választólistát kellene feltölteni. Ezért kellene átadni a listát a form2-nek.

    És akkor egy kis on topic is!
    Ha már C, akkor ott, hogy csinálnád?

  • Homer

    tag

    Hello,
    Visual Studio 2010-ben, Visual Basic-hez hogyan lehet beállítani a dx referenciakönyvtárat úgy, hogy az minden új projectnél megmaradjon?

    DX11 SDK (june 2010) telepítve van már.

  • Homer

    tag

    válasz martonx #2143 üzenetére

    És egyáltalán lehet dx11 referenciát hozzáadni vb2010 projecthez?

    Itt azt írják hogy nem:
    [link]
    :( Igaz lehet ez? Van valami alternatíva? XNA vagy ilyesmi?

    Az a problémám, hogy mozgatni szeretnék egy form főablakán egy "golyót" és folyton vibrál a frissítésnél.
    Double buffered beállítással már próbálkoztam, picit jobb de nem tökéletes.
    VB2003-ban még úgy emlékszem, hogy ment a dx. Az alapokat emlékszem, hogy próbálgattam benne, de itt sehogy nem akar összejönni.

    [ Szerkesztve ]

  • Homer

    tag

    válasz martonx #2145 üzenetére

    Nyilván bele lehet kötni abba is, hogy egyáltalán miért éppen visual basic... Azért, mert ez van, és kész!
    Nem akarok sem windóz 9-et írni, sem quake 5-öt visual basic-ben. Én csak arra lennék kíváncsi, hogy hogyan lehet egy egyszerű alakot egy formon villódzásmentesen frissíteni 25 fps-el, mert ugye ez kell, hogy folyamatos legyen a mozgás. Ha ehhez dx kell, akkor gondoltam nézegetm azt is, de ha xna akkor azt. Egyelőre egyikhez sem konyítok. Amit olvastam eddig róla, angol fórumokon, hogy közvetlenül kell programozni a videokártya gpu-t melyhez különféle windóz api-k vannak (OpenGL,DX, XNA...stb). OpenGL és DX kilőve a VB2010-ben, mert csak VC++ lib-et lehet hozzáadni a Visual Studio-hoz, azt is csak körülményesen. Az XNA meg, (amennyire látom), windows phone-hoz van gyárilag, tehát ez is buhera megoldás. (Persze megint lehet, hogy tévedek. Javíts ki ha gondolod!) :)

    Na mindegy! Azért természetesen köszönöm a válaszokat!

  • Homer

    tag

    válasz martonx #2147 üzenetére

    Csak az első pontra válaszolnék, a többivel tulajdonképpen egyetértek. :)
    Azért, mert a munkahelyemen csak ilyet sikerült telepíttetnem a rendszergazdákkal...

    Am. ezt találtam, majd kipróbálom:
    [link]

    [ Szerkesztve ]

  • Homer

    tag

    válasz martonx #2153 üzenetére

    "Laza kellemes hely lehet", ha mellette ráérsz fórumozgatni is közben. :DD

    Na jól van, nem leszek gonosz. :) Az, hogy valaki mással (is) tölti az ebédidejét /szabad kapacitását nem jelenti azt, hogy olyan laza lenne a munkája. Én spec azért kezdtem el tanulni a VB-t, mert hasznát vettem a munkámban. Már nem egyszer fordult elő, hogy egy Excel-es feladatot VBA segítségével oldottam meg. Innen indult a programozás iránti érdeklődésem. Most ott tartok, hogy Turbo pascal megy valamennyire (ezt még egyetemen tanították), meg VB olyan alap-közép közti szinten (legalábbis itt érzem magam). Ezt már autodidakta módon tanultam.

    [ Szerkesztve ]

Új hozzászólás Aktív témák